composer 2.2+ 已彻底移除 --with-dependencies,报错“unrecognized option”;应改用 --with-all-dependencies 递归更新目标包及其全部层级依赖,或 composer update 默认全量解析依赖树。

这个命令在 Composer 2.2+ 中已彻底移除,执行会直接报错:Unrecognized option: --with-dependencies。 它不是“不推荐”,而是被明确删除——语义模糊、行为不可控,且和 composer update 默认行为严重重叠。
为什么你看到的文档或历史脚本还在用 --with-dependencies
旧版 Composer(2.1 及更早)确实支持该参数,但自 2022 年 Composer 2.2 发布起,它就被完全剔除。如果你在 CI 日志、团队 Wiki 或某篇博客里看到它,说明内容未更新,或环境仍卡在老旧版本(存在安全风险)。
- Composer 2.2+ 不再识别该参数,任何含
--with-dependencies的命令都会中断并提示错误 - 即使降级到 Composer 2.1,该参数也仅更新目标包的**一级子依赖**(即其
composer.json中require声明的包),不会递归到底层 - 它无法解决“Laravel 升级后
symfony/console还是 v5”的问题——那需要更深的依赖树刷新
真正想递归更新子依赖,该用什么
替代方案不是“换名字”,而是按意图选对参数:
- 只更新某个包 + 它所有层级的依赖(即整个依赖树):用
composer update vendor/package --with-all-dependencies - 安装新包时自动连带升级冲突的已有依赖:用
composer require vendor/package --update-with-dependencies(--with-all-dependencies是它的别名,但前者语义更清晰) - 想让整个项目所有依赖(含 dev)都升到约束允许的最新版:直接运行
composer update—— 它默认就递归解析整棵树,无需额外参数
注意:--with-all-dependencies 不等于“全量重装”。它仍受 composer.lock 和版本约束限制,不会更新未被目标包引用的其他顶级依赖。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
常见错误现象和踩坑点
加了 --with-all-dependencies 却没看到子依赖版本变化?大概率不是参数失效,而是以下原因:
-
composer.lock里已锁定一个满足所有约束的版本,Composer 认为“无需更新” - 子依赖的版本范围太宽(如
"monolog/monolog": "^2.0"),而当前已安装的是2.10.0,它就是满足^2.0的最新兼容版 - 多个顶层包共同约束同一子包(如 A 要求
psr/log ^1.0,B 要求psr/log ^2.0),Composer 无法满足,会报错而非跳过 - 更新后类找不到?先跑
composer dump-autoload,自动加载器没重建是高频盲区
性能上,--with-all-dependencies 会显著拉长 solver 时间,大型项目可能卡住十几秒甚至触发 PHP 内存溢出(尤其 memory_limit
日常开发该怎么做才安全
绝大多数时候,你根本不需要手动触发深度更新:
- 想修一个小 bug 或更新单个包?改
composer.json里对应行的版本号(如"guzzlehttp/guzzle": "^7.8"),再执行composer update guzzlehttp/guzzle—— 默认行为已足够 - 团队协作中,只提交
composer.json和composer.lock;其他人运行composer install即可严格复现,这才是稳定基石 - CI/CD 流水线里禁止无参数
composer update,更别说已废弃的--with-dependencies—— 每次构建依赖不同,就是环境漂移的开始
真正需要 --with-all-dependencies 的场景很窄:比如你刚把 laravel/framework 从 v9 升到 v10,发现运行时报 Class not found,且确认是 symfony/console 版本太低卡住了——这时才值得加参数强制刷新整条依赖链。










