Правильное удаление модулей Drupal 10

Главные вкладки

Аватар пользователя gera8774 gera8774 20 декабря в 17:21

Всем привет! Как правильно удалять модули?
Вот у меня например есть модуль privatemsg и я хочу его удалить.
Иду в админку в удаление. При попытке удалить он мне конечно говорит сначала удалить все сущности, связанные с модулем, что я благополучно и делаю.
Удаляю в админке, всё хорошо.
Далее делаю composer remove drupal/privatemsg
Получаю в терминале сообщение о благополучном удалении, но... При этом также удаляется модуль Views Bulk Operations, который требовался для privatemsg (но и не только для него вообще-то)
Соответственно после этого ошибка на сайте, говорящая мне о том, что Views Bulk Operations отсутствует.
Иду устанавливаю его заново через composer.
Так и должно быть?

Комментарии

Аватар пользователя cwpnaWLs7M4a cwpnaWLs7M4a 21 декабря в 17:19
1

раньше было 2 стабильные вещи это javascript и composer. но похоже композер выходит из этого списка.

0. сохраните текущий composer.json и composer.lock
1. надо установить последнюю версию composer selfupdate
2. установите что лишнее требует чтобы его стабилизировать.
3. используйте composer why, why-not, prohibits для понимания что от чего зависит.
4. наконец composer validate
5. есть вариант с удалением composer.lock но это не знаю

Аватар пользователя VasyOK VasyOK 22 декабря в 19:43

Если в админке друпала модуль удаляется - это уже хорошо.
Ваша проблема только в том что уход VBO? Так поставьте его через композер.

Аватар пользователя gera8774 gera8774 23 декабря в 10:48

Ну в данном случае да. Но это происходит и при удалении других модулей, там тоже сносятся какие-то созависимые модули. То есть да, я устанавливаю заново. Но это же как-то странно...

Аватар пользователя gun_dose gun_dose 23 декабря в 15:48
2

Похоже, что у вас VBO установился только как зависимость, а в composer.json не прописался отдельно. Просто выполните composer require drupal/views_bulk_operations

gera8774 wrote: Но это же как-то странно...

Тут как раз ничего странного - все зависимости должны удаляться, если они не перечислены в composer.json и не требуются для других модулей. Вот если бы они не удалялись, то это было бы странно

Аватар пользователя schnauss schnauss 24 декабря в 11:55

Ну давайте рассуждать логически:

1) Модуль privatemsg требует модуль VBO как зависимость
2) composer умеет скачивать зависимости, поэтому когда вы скачиваете через composer privatemsg, он автоматически скачивает и VBO
3) При включении модулей Drupal тоже предлагает включить зависимости, если они не включены. Поэтому когда вы включаете privatemsg Drupal включает и VBO
4) Однако в обратной последовательности ЭТО НЕ РАБОТАЕТ! Если вы деинсталлируете в админке privatemsg, то Drupal не деинсталлирует VBO. Я думаю это сделано потому, что модуль может быть использован много где, даже в кастомном коде.
5) Однако composer в отличие от Drupal удаляет зависимости, поэтому если вы не деинсталлировали VBO вручную и запустили composer remove drupal/privatemsg, то composer удалит и VBO, хотя он включен в друпале и это даст вам белый экран смерти на сайте

Вывод: нужно просто это запомнить, что перед удалением модуля нужно проверить не включены ли его зависимости (если они есть). Узнать есть ли у модуля зависимости можно посмотреть как в админке, так и в info файле модуля