Пара вопросов по работе с Composer (установка и обновление модулей)

9 декабря 2022 в 10:04

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. Я мог ошибиться, лучше пусть коллеги поправят меня.

9 декабря 2022 в 11:55

1. Да, может
2. Правильно - это: прочитать CHANGELOG определенного модуля, убедиться, что там нет ничего требующего внимания после обновления. Обновить этот модуль. Протестировать функциональность на сайте, ничего ли не сломалось. К сожалению на это не всегда есть время и бюджет, поэтому вариант "обновить всё сразу" довольно часто используется
3) Правильное удаление модуля в любом случае: деинсталлировать в админке, запустить composer remove drupal/MODULENAME. Если модуль не был установлен через composer, то тот просто скажет что ничего не будет делать. В этом случае нужно вручную удалить папку с модулем. Иначе composer это сделает сам.

9 декабря 2022 в 13:09

по п.3 - при установке модуля через composer модифицируется не только composer.json, но и composer.lock, vendor/composer/installed.*, vendor/composer/autoload*, плюс сами модули могли притянуть в зависимостях либы в vendor/
Поэтому - то, что ставилось через composer, через него же и должно удаляться.
Я бы на вашем месте вернул папки с модулями обратно, а затем удалил композером.

9 декабря 2022 в 14:35

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 - нужно выполнить, если его папку удалили руками.

10 декабря 2022 в 0:46

Убрать знаки крыши и тильды в номере версии. Номер указать текущей версии

"drupal/core-composer-scaffold": "9.4.0",
"drupal/core-recommended": "9.4.0",
22 декабря 2022 в 11:45