1) Устанавливал модули с указанием версии, например
composer require 'drupal/simple_sitemap:^4.1'
Команда composer update --with-dependencies
сможет в данном случае обновить все модули и их зависимости до актуальных версий? Или же теперь необходимо вручную указывать каждому модулю на какую версию обновиться?
2) Как вообще правильнее обновлять модули? Из админки "Отчёт - Доступные обновления" или теперь только композер?
Запускаем composer update --with-dependencies
, потом смотрим в админке отчёты и доступные обновления для БД?
2) Удалял модули без участия composer. Т.е. сначала удалил в админке друпала, а потом руками удалил каталог из modules/contrib. В composer.json есть строчка с этим модулем. Значит такой метод удаления модулей (руками удалить файлы) повлияет на дальнейшую работу композера?
Если уже это случалось как теперь поступить?
Комментарии
1. Если в composer.json не задана жестко, не ограничена мажорная ветка. Иногда нужно изменить там, и потом обновлять
2. лучше все композером
3. Нужно удалить в composer.json строку, иначе потом обновится и установится.
PS. Я мог ошибиться, лучше пусть коллеги поправят меня.
1. Да, может
2. Правильно - это: прочитать CHANGELOG определенного модуля, убедиться, что там нет ничего требующего внимания после обновления. Обновить этот модуль. Протестировать функциональность на сайте, ничего ли не сломалось. К сожалению на это не всегда есть время и бюджет, поэтому вариант "обновить всё сразу" довольно часто используется
3) Правильное удаление модуля в любом случае: деинсталлировать в админке, запустить composer remove drupal/MODULENAME. Если модуль не был установлен через composer, то тот просто скажет что ничего не будет делать. В этом случае нужно вручную удалить папку с модулем. Иначе composer это сделает сам.
по п.3 - при установке модуля через composer модифицируется не только composer.json, но и composer.lock, vendor/composer/installed.*, vendor/composer/autoload*, плюс сами модули могли притянуть в зависимостях либы в vendor/
Поэтому - то, что ставилось через composer, через него же и должно удаляться.
Я бы на вашем месте вернул папки с модулями обратно, а затем удалил композером.
1. Сможет. Хорошо, что вы знаете, как обновить отдельный модуль. Если что-то не сможет, перед обновлением нужно сделать копию файлов composer.json composer.lock и дамп БД. Если что-то пойдет не так - вернуть файлы, выполнить composer install и откатить БД-у.
2. Обновлять - Теперь только композер. Читать отчеты - где хотите.
3. Если вы удалили папку модуля ручками, папка появится при следующем composer install. А команду вы будете выполнять часто.
[совет по быдлокодингу] Если есть подозрения, что модули кто-то внес изменения, удалить папки
web/core/
web/modules/contrib/
vendor/
и выполнить composer install - должно все поставить на места. Хотя этот кто-то может в папку modules/contrib/ без композера ручками модули "доустанавливать".
Да, composer remove drupal/MODULENAME - нужно выполнить, если его папку удалили руками.
Как обновить только модули? не трогая ядро
composer update --with-dependencies
обновляет все модули вместе с ядром
Можно временно залочить версию ядра в composer.json
как?
Убрать знаки крыши и тильды в номере версии. Номер указать текущей версии
"drupal/core-recommended": "9.4.0",
понял. благодарю