【问题标题】:Is is possible to run composer install while suppressing package uninstallation (Drupal 8)?是否可以在抑制软件包卸载(Drupal 8)的同时运行 composer install ?
【发布时间】:2019-11-13 14:30:34
【问题描述】:

我正在使用 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 卸载说明。

【问题讨论】:

  • vendor 中保留不应再存在的软件包背后的逻辑是什么,因为它们未在composer.json 中列出?这对我来说没有意义
  • 正如我所说,在第 3 步中,我的 CMS (Drupal 8) 需要存在包才能卸载包。具体来说,这涉及从系统数据库中删除包工件。

标签: php drupal composer-php drupal-8


【解决方案1】:

installupdate 的选项就在这里。

不,没有可用的选项来运行任一命令并只完成其一半的工作。删除不需要的依赖项是 composer 工作的一部分。

如果你想要这种行为,你必须自己编写代码。

【讨论】:

    【解决方案2】:

    我已经用 Drupal 标记了它,因为它可能与其他系统无关。

    我现在的解决方案是在 composer install 之后运行的脚本中捕获删除,该脚本会重新安装已删除的模块。后来git checkout恢复composer.*的状态,然后composer install再次运行。所以顺序是:

    1. 更新我的本地存储库
    2. 运行 composer install 并过滤输出以删除 ANSI 代码并提取以“-Removing”开头的行,然后提取以“Deleting”开头的行并将它们重新格式化为 composer require 在名为 composer.reinstall.sh 的脚本中的命令:
    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)
    
    1. 运行生成的脚本:sh composer.reinstall.sh
    2. 在我的 CMS(drush cimdrush updb BTW)中运行脚本来处理包安装/卸载细节(取决于包的存在)
    3. 重新初始化作曲家文件:rm composer.reinstall.sh; git checkout composer.*
    4. 运行composer install 卸载从@​​987654332@ 删除的所有包

    【讨论】:

      猜你喜欢
      • 2010-10-27
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 2016-03-02
      • 1970-01-01
      • 2010-11-19
      相关资源
      最近更新 更多