我使用的是Drupal-8,当使用composer需要一个包并使用Drupal安装时,它需要以下工作流程,但随后从Drupal卸载并由另一个开发人员通过composer删除:
- 更新本地存储库
- 运行
composer
以在composer.json
中安装或更新(并且仅安装/更新(程序包 - 在我的CMS中运行脚本来处理软件包安装/卸载的详细信息(取决于软件包的存在(
- 运行
composer
卸载从composer.json
中删除的所有程序包
步骤4可能只是composer install
,但我想知道是否有某种方法可以抑制步骤2中的包卸载?此外,Drupal-8无法完成步骤3,因为删除的composer包中嵌入了Drupal卸载指令。
安装和更新选项就在这里。
不,没有任何选项可以运行这两个命令,并且只完成其一半的工作。删除不必要的依赖关系是composer工作的一部分。
如果你想要这种行为,你必须自己编码。
我已经用Drupal对此进行了标记,因为它可能不属于其他系统。
我目前的解决方案是在composer安装后运行的脚本中捕获删除内容,该脚本将重新安装已删除的模块。稍后git checkout
恢复composer.*的状态,然后composer install
再次运行。所以顺序是:
- 更新本地存储库
- 运行
composer install
并过滤输出以删除ANSI代码,并拉出以"-Removeing"开头的行和以"Delete"开头的列,然后在名为composer.reinstall.sh
的脚本中将它们重新格式化为composer require
命令:
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)
- 运行生成的脚本:
sh composer.reinstall.sh
- 在我的CMS(
drush cim
和drush updb
BTW(中运行脚本来处理包安装/卸载的详细信息(取决于包的存在( - 重新初始化composer文件:
rm composer.reinstall.sh; git checkout composer.*
- 运行
composer install
卸载从composer.json
中删除的所有程序包