Можно ли запустить composer install, подавляя удаление пакета (Drupal 8)?

Можно ли запустить composer install, подавляя удаление пакета (Drupal 8)?

13.11.2019 05:30:34 Просмотров 52 Источник

Я использую Drupal-8, и для этого требуется следующий рабочий поток, когда пакет был необходим с помощью composer и установлен с помощью Drupal, но впоследствии удален из Drupal и удален через composer другим разработчиком:

  1. Обновите мой локальный репозиторий
  2. Запустите composer, чтобы установить или обновить (и только установить/обновить) пакеты в composer.json
  3. Запуск скриптов в моей CMS для работы с деталями установки/удаления пакета (которые зависят от наличия пакета)
  4. Запустите composer, чтобы удалить все пакеты, удаленные из composer.json

Шаг 4 , вероятно, может быть просто composer install, но мне интересно, есть ли способ подавить удаление пакета на Шаге 2? Кроме того, Drupal-8 не может выполнить Шаг 3, поскольку в удаленном пакете composer встроены инструкции по удалению Drupal.

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/58839369/is-is-possible-to-run-composer-install-while-suppressing-package-uninstallation#comment103965468_58839369
Как я уже говорил, на Шаге 3, Моя CMS (Drupal 8)требует наличия пакета для удаления пакета. В частности, это включает удаление артефактов пакета из системной базы данных.

Ответы - Можно ли запустить composer install, подавляя удаление пакета (Drupal 8)? / Is is possible to run composer install while suppressing package uninstallation (Drupal 8)?

yivi

13.11.2019 08:42:53

Параметры установки и обновления находятся прямо здесь.

И нет, нет возможности выполнить любую команду и выполнить только половину ее заданий. Удаление ненужных зависимостей является частью того, что делает композитор.

Если вы хотите такое поведение, вам придется кодировать его самостоятельно.

Mike Godin

14.11.2019 11:24:22

Я отметил это с помощью Drupal, поскольку это может не относиться к другим системам.

Мое решение на данный момент заключается в том, чтобы захватить удаления в сценарии, который я запускаю после установки composer, который повторно устанавливает удаленные модули. Позже git checkoutвосстанавливает состояние композитора.* , затем rm composer.reinstall.sh; git checkout composer.*запускается снова. Итак, последовательность такова:

  1. Обновите мой локальный репозиторий
  2. Запустите rm composer.reinstall.sh; git checkout composer.*и отфильтруйте выходные данные, чтобы удалить коды ANSI и вытащить строки, начинающиеся с "- Removing", а затем строки, начинающиеся с "Deleting" , и переформатируйте их как composer require:
composer.reinstall.sh
  1. Запустите сгенерированный скрипт: composer install | tee >(perl -pe 's/\e\[[0-9;]*m//g'|grep -B1 "^Deleting"|grep "^ - Removing"| perl -pe 's/^ - Removing ([^ ]+) \(([^\)]+)\)/composer require \1:\2/g' > composer.reinstall.sh)
  2. Запуск скриптов в моей CMS (sh composer.reinstall.shи drush cimBTW) для работы с деталями установки/удаления пакета (которые зависят от наличия пакета)
  3. Повторная инициализация файлов composer: drush updb
  4. Запустите rm composer.reinstall.sh; git checkout composer.*, чтобы удалить все пакеты, удаленные из composer install
Закрыть X