composer update --with-dependencies 已被彻底移除,执行会报错;正确选项是 --with-all-dependencies(或 -w)用于更新指定包及其全部直接和间接依赖,而 --with 仅支持指定直系依赖包名,且均需配合包名使用。

composer update --with-dependencies 已不存在,别再试了
执行 composer update --with-dependencies 会直接报错:Unrecognized option: --with-dependencies。这个参数在 Composer 2.2+ 中已被彻底移除,不是“不推荐”,而是源码里根本没这玩意儿了。它曾短暂出现在 v1.x 的实验分支里,但从未进过正式发布版。现在所有文档、GitHub issue、官方命令行 help 都找不到它。
真正能“更新依赖的依赖”的两个有效参数
想让某个包升级时,连带把它 require 的那些包也一起升(比如更新 monolog/monolog 时,顺手把 psr/log 升到它要的版本),得用这两个:
-
--with-dependencies:只放开目标包自己composer.json里的require列表——一层深。例如composer update monolog/monolog --with-dependencies会更新monolog/monolog和它直说要的psr/log、php等,但不会动psr/log自己依赖的psr/simple-cache -
--with-all-dependencies(或简写-W):放开整条依赖链,所有间接依赖都参与重算。比如composer update monolog/monolog -W可能一路升到symfony/polyfill,只要约束允许
注意:--with-dependencies 不接受值,不能写成 --with-dependencies=psr/log;而 --with-all-dependencies 也不支持指定包名前缀,它只作用于你显式列出的包及其整个子树。
为什么加了 --with-all-dependencies 还是没更新到底层包?
常见现象:你跑了 composer update monolog/monolog -W,但 vendor/symfony/console 没变。原因很实在:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 该包没被任何已安装的顶层依赖(
require或require-dev)直接或间接引用——它是“孤儿” - 其他包对它的版本约束太紧,比如
guzzlehttp/guzzle锁死"symfony/console": "5.4.*",而monolog要^6.2,Composer 拒绝破坏约束 -
composer.lock里该包的source或dist字段没变,说明求解器判定无需更新
验证方式:加 --dry-run 先看影响范围,或执行 composer show monolog/monolog 查它声明的 require,再顺着查那些包各自的依赖链。
日常更新单个包,其实不需要任何 --with 参数
绝大多数时候,你只需要:composer update vendor/package-name。它默认就会更新目标包 + 它直系依赖中“不得不升”的部分(比如旧版 psr/log 不满足新 monolog 的 require),这是 Composer 依赖求解的自然结果,不是 bug,是设计使然。
加 --with-all-dependencies 的真实代价容易被低估:大型项目里它可能触发几十秒解析、内存爆掉、或引入多个 minor 版本漂移——这些变动不会出现在 PR 描述里,但会在 composer.lock diff 里悄悄扩散。真要用,先 --dry-run,再 git diff composer.lock,最后才 commit。










