Я долго противился работе с composer в Drupal, но, деваться некуда. Де-факто без composer сейчас очень сложно работать с Drupal, хотя и можно.
Composer — это пакетный менеджер уровня приложений для PHP, который управляет зависимостями в PHP-приложении. Работает в командной строке.
После переезда с Windows на Linux с composer работать стало проще. В итоге у меня сложилась такая ситуация, часть старых модулей лежат в папке /modules
, а новые уже размещены в /modules/contrib
. И тут я столкнулся с неприятной ситуацией, чтобы перенести старый модуль в /modules/contrib
, его предлагают сначала удалить, а потом установить через composer. Подождите, а как же настройки модуля и сами данные, они же при удалении сотрутся? Так не пойдёт! Переносим модуль в папку contrib без удаления данных.
Как раз подоспела пачка обновлений. Очень хочется обновить модуль PHP на версию 8.x-1.2.
Посмотрим где у нас этот модуль находится.
Модуль PHP лежит в папке /modules
, будем переносить.
Обновлять модуль предлагается через composer:
composer require 'drupal/php:^1.2'
Подготовимся для начала, нам понадобится drush. Тоже пора переходить на администрирование сайта через командную строку.
Drush (от Drupal shell) — утилита с интерфейсом командной строки, созданная для управления и администрирования Drupal сайтов. Доступна как для Linux, так и для Windows.
Drush устанавливаем через composer. Переходим в корневую директорию Drupal сайта. Composer запускаем от имени пользователя, под которым работает web-сайт.
sudo -u www-data composer require --dev drush/drush
Обновляем наш модуль PHP:
sudo -u www-data composer require 'drupal/php:^1.2'
Смотрим что получилось. Теперь у нас есть и старый модуль PHP в папке /modules
, и более новый в /modules/contrib
.
Старый модуль PHP из папки /modules
удаляем (или переносим в другую папку подальше, вдруг, восстанавливать придётся).
Воспользуемся drush. При его работе есть тонкость, если ваш Drupal работает в режиме мультисайта, то выполнять его требуется из директории нужного сайта, он там читает конфиги для доступа к базе данных, иначе он не поймёт с чем ему работать. Переходим в директорию вашего сайта. Чистим кэш.
sudo -u www-data ../../vendor/bin/drush cr
Обновляем базу.
sudo -u www-data ../../vendor/bin/drush updb
Если ранее не обновляли модуль, то переходим в корневую папку и обновляем.
sudo -u www-data composer require 'drupal/php:^1.2'
Переходим в директорию вашего сайта. Чистим кэш.
sudo -u www-data ../../vendor/bin/drush cr
Можно, конечно, всё это и вручную провернуть, но очень муторно. Особенно, если модулей много.
Модуль PHP перенесён в папку /modules/contrib
, его версия заодно обновлена.