Composer update –with-dependencies 同时更新依赖的依赖【方法】

10次阅读

composer update –with-dependencies 已被彻底移除,因语义模糊且与默认行为重叠;应改用 –with 或 –with-all-dependencies 精确控制范围,或直接使用 composer update 默认递归更新整棵树。

Composer update –with-dependencies 同时更新依赖的依赖【方法】

composer update –with-dependencies 早已被移除

这个命令在 Composer 2.2+ 中已彻底废弃,执行会直接报错:Unrecognized option: --with-dependencies。它不是“暂时不推荐”,而是被明确删除——因为语义模糊、行为不可控,且和 composer update 默认行为重叠严重。

替代方案:用 –with 和 –with-all-dependencies 精确控制范围

Composer 2.2 起引入了更清晰的依赖更新粒度控制:

  • --with vendor/package:只把指定包及其**直接依赖**(即 composer.json 里声明的依赖)纳入更新范围,不递归向下
  • --with-all-dependencies:把指定包 + 它所有层级的依赖(包括子依赖的子依赖)全部加入更新候选集
  • 两者可组合使用,例如:composer update monolog/monolog --with-all-dependencies

注意:--with-all-dependencies 不等于“全量更新”,它仍只作用于你显式列出的包及其依赖树,不会动其他未提及的包。

为什么不能无脑 –with-all-dependencies?

看似方便,实则风险集中:

  • 可能意外升级一个底层包(如 symfony/polyfill),导致某个间接依赖的运行时行为变化
  • 多个主包共用同一底层依赖时,--with-all-dependencies 可能因版本约束冲突而失败,报错类似:Conclusion: don't install symfony/console v5.4.39
  • CI 环境中难以复现,因为 lock 文件变动比预期大,diff 难以审查

真正需要“连带更新依赖的依赖”时,优先考虑:composer update vendor/package --with-all-dependencies --dry-run 先看影响范围。

想安全更新整个依赖树?别绕弯,就用默认行为

如果你本意是“让所有依赖都升到满足约束的最新版”,最简单也最可靠的方式就是:

  • 删掉 composer.lock(谨慎!仅限本地验证)
  • 或直接运行:composer update —— 它默认已递归解析并更新整棵树,只要版本约束允许
  • 若只想更新某类包(如只更新 dev 依赖),用:composer update --dev

所谓“依赖的依赖”,从来不在 Composer 的更新逻辑之外;它只是你没意识到,默认就已经在做了。

text=ZqhQzanResources