Как использовать composer для drupal
Composer
Composer — пакетный менеджер для языка программирования PHP, написанный на PHP. Основная задача Composer — управление зависимостями проекта, также, как это делает npm\yarn для node.js, pip для python и др.
Зависимости от Composer в виде компонентов Symfony, появились начиная с Drupal 8.0, в дальнейшем, с релиза Drupal 8.1, у Drupal появились собственные репозитории в композере и появилась возможность управлять зависимостями друпала полностью при помощи Composer.
¶Шаблоны проектов
Для Drupal также существует ряд готовых composer проектов с Drupal:
¶Примеры использования
¶Установка новых зависимостей
Установка Drupal проекта последней стабильной версии:
Установка Drupal проекта конкретной версии. При данном подходе, модуль обновляться не будет.
Пример установки Drupal проекта из dev-версии. При данном подходе, зависимость будет обновляться только в пределах dev версии.
Пример установки Drupal проекта из dev-версии, но с блокировкой на определенный коммит. Данный пакет будет установлен из гит репозитория проекта на определенный коммит. Вы можете указать hash ID коммита целиком, либо первые 7 символов.
¶Установка зависимостей
¶Обновление зависимостей
Пример команды обновления всех зависимостей на проекте, включая ядро, модули, и зависимости зависимостей.
Пример обновления конкретной зависимости.
Пример обновления конкретной зависимости, а также зависимостей указанных для него.
¶Удаление зависимостей
Пример удаления Drupal проекта.
¶Патчинг зависимостей
Иногда в модулях для Drupal, или в самом ядре, обнаруживают ошибки. Для исправления ошибок готовят патчи, которые в дальнейшем попадут в dev релиз, а затем в стабильный.
¶Советы и рекомендации
¶Смотрите также
¶Ссылки
🌱 Помогите нам сделать документацию лучше!
Вся документация Druki с отрытым исходным кодом. Нашли ошибку или неточность? Создайте pull request.
🤔 По-прежнему нужна помощь?
Не нашли ответа на свой вопрос? Попросите помощи у сообщества!
Шаблон Composer для проектов Drupal
Это шаблон проекта, который предоставляет стартовый набор для управления зависимостями вашего Drupal сайта с помощью Composer.
Если вы хотите узнать, как использовать его в качестве замены для Drush Make, посетите документацию на drupal.org.
Использование
После этого вы можете создать проект:
cd some-dir
composer require drupal/devel:
Что делает шаблон?
При установке данного файла composer.json выполняются следующие задачи:
Обновление ядра Drupal
Следуйте инструкциям ниже, чтобы обновить ваши основные файлы:
Создать composer.json из существующего проекта
С помощью Drush-расширения «Composer Generate» теперь вы можете создать базовый файл composer.json из существующего проекта. Обратите внимание, что созданный файл composer.json может отличаться от файла этого проекта.
Часто задаваемые вопросы
Должен ли я фиксировать загружаемые контриб модули?
Должен ли я фиксировать скаффолд файлы?
Плагин drupal-scaffold может загружать скаффолд файлы (такие как index.php, update.php, …) в каталог web/ вашего проекта. Если вы не изменяли эти файлы, вы можете не регистрировать их в своей системе контроля версий (например, git). Если же вы все таки настраивали эти файлы, может быть удобно автоматически запускать плагин drupal-scaffold после каждой установки или обновления вашего проекта. Вы можете добиться этого, зарегистрировав @composer drupal:scaffold качестве команды post-install и post-update в вашем composer.json:
«scripts»: <
«post-install-cmd»: [
«@composer drupal:scaffold»,
«. »
],
«post-update-cmd»: [
«@composer drupal:scaffold»,
«. »
]
>,
Как я могу применить патчи к загруженным модулям?
Если вам необходимо применить исправления (в зависимости от изменяемого проекта, pull request часто является лучшим решением), вы можете сделать это с помощью плагина composer-patches.
Чтобы добавить патч к модулю drupal, вставьте раздел патчей в дополнительный раздел composer.json:
«extra»: <
«patches»: <
«drupal/foobar»: <
«Patch description»: «URL or local path to patch»
>
>
>
Как мне перейти с packagist.drupal-composer.org на packages.drupal.org?
Как мне указать версию PHP?
Этот проект поддерживает PHP 5.6 как минимальную версию (см. Требования Drupal 8 PHP ), однако возможно, что composer update может запросить некоторый пакет, который затем потребует PHP 7+.
Композеризируем проекты на Drupal 7
Поработав с ней немного, уже и не представляешь как без него жилось.
Это, поистине, один из главных инструментов современного PHP-разработчика, и благо в Drupal 8 уже все строится именно им.
Но, и при работе с Drupal 7 можно стать чуточку счастливее, если перевести проект на рельсы composer-way. К счастью, это делается весьма просто.
Определяем что нужно сделать
Допустим, у нас есть работающий проект на Drupal 7, держим его пока в уме отдельной директории.
Нам нужно определить один из поддерживаемых сообществом вариаций для ведения проекта Drupal + Composer.
За этим отправляемся на орг, конечно. Там для нас есть страничка, со списком доступных вариантов композер-сборок. Среди них, 2 (на момент написания данного поста) поддерживают работу с Drupal 7:
Оба варианта хороши и похожи. Главное различие заключается в том, что для 2го способа все серверные скрипты вынесены в отдельный пакет, что дает больше гибкости и возможность управления ими.
В итоге, мы получим более-менее стандартную реализацию, приближенную по своей структуре к Drupal8-way проектам:
Шаг #1: Подготовка и установка
И уже в необходимой директории проекта выполнить инициацию, попутно, ответив на все интересующие скрипт вопросы:
Можно, при желании, указать прям здесь список всех зависимостей, но мы это сделаем в следующем шаге.
На данном этапе, мы получили стартовую конфигурацию проекта, реализованную в composer.json файле.
Хорошо! Идем дальше.
Шаг #2: Установка зависимостей
В этом шаге мы установим все зависимости нашего проекта:
Прежде всего, выполняем установку:
Теперь, ядро и компоненты проекта установлены, нам нужно лишь добавить нужные модули.
(Не забываем, что все модули указываются не по машинному имени, а вместе со стандартным вендором: drupal/module_name )
Должно получиться что-то вроде:
Реквайрим все-все контрибные модули, которые используются в текущем проекте. Обязательно проверяем.
*Не забываем перенести все кастомные модули в web/sites/all/modules/custom, и темы в web/sites/all/themes/custom, соответственно.
Так же, переносим библиотеки (если используются, но разработчики не организовали их как зависимости) в web/sites/all/libraries.
После того как composer отработает, у нас будет полностью готовый к работе проект.
Шаг #3: Перенос файлов и настроек
Коммитимся для фиксации (вот, кстати, файлик игнора мне нравится у сборки drupal-composer, я его обычно себе просто копирую).
Гранд финал
Теперь можно все это дело интегрировать в прод.
Все бекапим, версионируем и следим за происходящим!
Drupalize.Me
Use Composer with Your Drupal Project for Drupal 7, Drupal 8, and Drupal 9
When managing your Drupal project with Composer you’ll use Composer commands to download (require) modules and themes that you want to install, as well as issuing commands to keep those modules and themes up-to-date when new versions are released.
In this tutorial we’ll:
By the end of this tutorial you should know how to use Composer to install, and update, Drupal modules and themes.
Create a new Composer-managed Drupal application and install some Drupal modules and themes.
Prerequisites
Important: If you need to update your already «composerized» site to Drupal 8.8.x or higher and you used the drupal-composer/drupal-project template to create your application originally, see this tutorial: Update Drupal from Versions Prior to 8.8.x using Composer.
Contents
Creating a new Drupal application
Note: As of Drupal 8.8.0, the recommended Composer template is the «officially supported» drupal/recommended-project. There are other popular «templates» for starting a new Drupal application with Composer, including drupal-composer/drupal-project. You can find the full list in Using Composer to manage Drupal site dependencies on Drupal.org. Note that the official drupal/drupal project is deprecated and not recommended. It will generate a codebase that cannot be easily upgraded via Composer. Do not use it.
In this tutorial, we will use the recommended solution, drupal/recommended-project. This template provides a great starting point that will make maintaining your site using Composer easier in the long term. We’ll also take note of some additional projects (developer tools) you might want to include when you initially create your project. Much of the configuration covered in Composer Configuration for Drupal is covered by the drupal/recommended-project template out of the box.
Note: If your site is on Drupal 8.7.x or lower and you want to upgrade your site to Drupal 8.8.x (or higher) and you had started your project using the drupal-composer/drupal-project template, read Update Drupal from Versions Prior to 8.8.x using Composer.
To create a new Drupal application that uses drupal-composer/drupal-project as a template, execute:
Replace my-drupal-project with the name of the project directory you want to use. (Note: If you want to customize values in the the template before composer install is executed, skip to the next section.)
Note: This command will install the latest stable release of Drupal core by default. You can choose a previous version of Drupal core by specifying a version number.
At this point you can use Composer to require additional projects such as Drush, with:
Customizing the template before install
Edit composer.json. In the extra array, change the value of webroot from web to your preferred directory name. Save the file. Then execute:
Which will download Drupal and all its dependencies.
Composerize an existing Drupal application
Taking an existing Drupal application that is NOT managed with Composer and beginning to manage it with Composer can be a little tricky. The exact method of implementation depends on the directory structure of your Drupal application, and it may require additional steps to handle edge cases that are not addressed in this tutorial.
There are multiple tools that automate the «composerization» process for you:
If none of these tools work for you, the following manual steps should get you started.
Enter your repository’s root directory, where .git lives.
Note: It is extremely important that you execute commands from the correct directory.
For some projects, the root directory may directly contain the Drupal core directory. In other projects, the root directory may be an additional level up such that core lives in docroot/core, web/core, etc.
Remove any vestigial composer.json files or vendor dirs
Your entire application should have exactly one composer.json file and exactly one vendor directory. If there is already a vestigial composer.json file or vendor directory that are unused, remove them.
Create a new composer.json file using the following as a template:
You now have a functional composer.json file that appropriately requires Drupal core and the various plugins required to manage a Drupal site with Composer.
Now, you must use Composer to manage all of your required contributed projects (modules, themes, profiles, etc.). This is a manual process that requires your review.
Repeat the composer require command for every contributed Drupal project required by your application.
You should also repeat composer require for any third-party libraries that may live in docroot/libraries. See the heading, Handling front end dependencies, in Composer Configuration for Drupal for more information.
To speed up this process, you may use Drush to generate a list of all installed Drupal projects. To do this, you must have Drupal installed on the local machine.
To install Drush, use:
Drush can query Drupal’s database to determine which projects are available:
Next, we will follow best practices and remove your contributed modules from version control.
Create a new .gitignore or modify an existing one by adding the following lines:
Next, remove these from version control:
That’s it! You are now managing all of your site dependencies with Composer. Be sure to continue reading and learn how to correctly deploy this application to a production environment.
Install a new Drupal package via Composer
To install a new Drupal package, first ensure that application’s composer.json is correctly configured as per Composer Configuration for Drupal. It should, at minimum, include the «drupal» repositories entry and installer-paths configuration.
To install a new Drupal project (module, theme, profile, etc.), execute:
By default this will download the latest stable version. You may also specify the version constraint:
This command may return an error if drupal/ctools 1.0.0 or one of its dependencies is not compatible with one of your root dependencies (those explicitly defined in your composer.json file). If that occurs, you will need to change the version constraint for one or more of your requirements until you have defined a set of intercompatible version constraints.
Note that in Composer parlance, «installing» simply means downloading the code, updating composer.lock, and making that code available via the autoloader. You still need to «install» the Drupal project (core, module, theme, profile, etc.) to the Drupal database via the UI or Drush.
Updating a dependency
To update any package, execute:
Note that this will update only drupal/ctools and will not update drupal/ctools ‘s dependencies, even if drupal/ctools requires new dependencies.
To update drupal/ctools and also all of the packages that drupal/ctools depends on, execute:
To update drupal/ctools and require a new minimum version (such as 1.1.0), execute:
This command may return an error if drupal/ctools 1.1.0 or one of its dependencies is not compatible with one of your root dependencies (those explicitly defined in your composer.json file). If that occurs, you will need to change the version constraint for one or more of your requirements until you have defined a set of intercompatible version constraints.
To quickly update all packages (within the bounds of your version constraints), execute:
As with updating any Drupal project, you should execute database updates after downloading the new package. If you are using Drupal Configuration Management, you should also re-export configuration after the database updates are complete.
Update Drupal core via Composer
Drupal core is a package like any other. So, you can follow the instructions for «updating a dependency» and simply specify drupal/core as the package name. It’s a good idea to specify a new minimum version for drupal/core so that a downgrade is never accidentally performed.
As with updating any Drupal project, you should execute database updates after downloading the new package. If you are using Drupal Configuration Management, you should also re-export configuration after the database updates are complete.
Installing a module’s dependencies with Composer
Let’s say there’s a module we did not install with Composer. How do we install the dependencies listed in that module’s composer.json file? If you’re asking this question, you’re actually on the wrong track. You first must use Composer to manage your entire Drupal application and install the module with Composer. Then, its dependencies will be installed for you automatically. See «Start using Composer to manage an existing Drupal Application» earlier in this tutorial.
As an alternative to using Composer, you might be able to use Ludwig to install the module’s dependencies if that module supports Ludwig.
Recap
In this tutorial, we learned how to perform common Composer tasks for Drupal applications.
Drupal 8: Два варианта установки ядра
Стандартная установка с drupal.org и composer drupal project. В чём их отличие, плюсы и минусы. А также, как мигрировать из одного варианта в другой.
В Drupal 8.1 управление сторонними зависимостями перешло на Composer, также, интеграция Composer и Drupal получила новый виток в развитии. С тех пор, установка Drupal, так, как предлагает официальный сайт, стала не единственным вариантом.
Вариантов на данный момент уже явно много, но я выделяю всего два:
Мой опыт работы с Drupal 8, заставляет меня делать очень неоднозначный вывод. Стандартный вариант установки — непрактичный, имеет недостатки, особенно для новичков, и проблемы с composer. С ним приходиться больше бороться и воевать, а преимуществ, как таковых, нет.
? Я сразу обращаю ваше внимание, то что всё что я буду писать, субъективное мнение на личном опыте. Оба варианта хороши, особенно при условии что между ними можно очень безболезненно мигрировать, каждому что-то подойдет лучше. Я лишь хочу поделиться опытом и показать что есть ещё вот такой способ и какое у него отличие от стандартного. Ведь такого в Drupal 7 у нас не было.
Плюсы и минусы вариантов ¶
Стандартный способ ¶
Drupal, как минимум с 7-ой версии, позиционируется как CMF решение. То есть, это некая золотая середина между CMS и чистыми фреймворками. Если у Drupal 7 был перевес в сторону CMS, то Drupal 8 ещё сильнее перевешивает в сторону фреймворков. И сторонние зависимости от Symfony ещё сильнее его туда склоняют. Исходя из этого, я выделяю следующие минусы.
Composer Drupal Project ¶
Вывод ¶
А теперь небольшой мой вывод: Я считаю что способ установки ядра через композер, в реалиях, друпал 8, должен быть одним единственным, как это сделано у Symfony. Вы у них нигде не скачаете на официальном сайте архив с фреймворком. Но по понятным причинам, такое уже сделать просто невозможно, я надеюсь что на такой шаг решатся с релизом Drupal 9. Тут можно дискутировать очень долго, нравится вам композер или нет, но факт в том, что если вы решили использовать Drupal 8, то композер де-факто становится обязательным, поэтому, лучше начать его использовать с самого старта и для всех задач которые он покрывает, а не выборочно там где у вас безвыходная ситуация.
Например, модуль Swift Mailer используется для отправки html писем, очень полезный и нужный. Попробуйте его установить и завести без композера. По факту то поставить можно, но это займет, скорее всего, часы в первый раз, а затем, любое обновление\изменение композера или модуля — опять семь кругов ада и это даже близко не пара минут даже с опытом. Или Drupal Commerce. В общем, композер вас догонит, как ни крути, да ещё пнет так, что сами не рады будите. Именно поэтому, многие новички могут посмотреть на это, и сказать — «Drupal говно!». К сожалению, они так могут и не понять почему у них столько проблем. И причина тут не в композере, и не в новичках.
Composer — это круто и удобно, но то как он работает и приготовлен в ядре из коробки, вызывает ненависть к нему. Мысль о том, что что-то вы делаете не так, все равно начнет со временем расти у вас в голове, отчасти это проблема ядра, и решение поискать другие варианты установки или ведения проекта на Drupal может быть совершенно неочевидным решением, особенно для новичков. Поэтому этот материал и есть, а также есть composer drupal project.
Я не навязываю вам composer drupal project, но очень настоятельно рекомендую, хотябы просто попробовать. Это совершенно другой экспириенс работы с Drupal, и для меня, он был в позитивную сторону, чего я не скажу про стандартный вариант.
Установка ¶
Стандартный способ ¶
Корень проекта, он же вебрут выглядит так.
Composer drupal project ¶
Корень проекта будет выглядеть так, а вебрут уже будет находиться в web папке.
А теперь небольшой обзор, в чем же их отлчие. По факту, всем чем отличается стандартный подход от composer drupal project в том, что, то что в composer drupal project находится в web, находится в корне проекта на стандартном варианте. index.php и обработка запросов будет из web/ папки. А всё что выше её в иерархии — недоступно из сети прямым запросом, а это drush, scripts, vendor директории, в дальнейшем там будет и config директории для конфигов, и какая-то папка для приватной файловой системы, если потребуется.
Корень проекта у вас там где composer.json, а вебрут в web. Вот и вся разница. Никакой магии, всё просто и понятно. В web у вас будет абсолютно вся та же структура сайта на Drupal, как и в стандартной установке. Вот только потенциально опасные папки на уровень выше. И это решает все проблемы с композером и безопасность.
Вот и вся их разница в установке и структуре. Это вроде бы незначительно, а какая разница в их поведении и вашем удобстве! Небо и земля. Попробуйте, 5 минут это ничто, если оно вам понравится, сэкономит вам часы на борьбе с композером.
Миграция из одного варианта в другой ¶
Лучше посмотреть видео, где это продемонстрировано наглядно. Таймкоды: 52:02 и 1:02:29.
Будьте аккуратны, не забывайте делать бэкапы.
Миграции из одного варианта в другой очень похожи, нужно лишь учитывать специфику вариантов, в зависимости от того откуда и куда переносится проект.
Что нужно чтобы сделать миграцию из одного варианта в другой (в обоих случаях):
Миграция из стандартного варианта в composer drupal project ¶
Теперь можно зайти на сайт, и всё заработает. Для надежности можно сбросить кэш.