composer update 默认不更新包因受 composer.lock 和 require 版本约束限制;需用 composer update --with-all-dependencies 重解析全部依赖并更新 lock 文件,而非仅 composer update foo/bar 或 composer install。

为什么 composer update 有时不更新你想要的包
因为 Composer 默认只更新 composer.lock 中已记录的依赖版本范围,不会主动升级到超出 require 中声明的约束(比如 "monolog/monolog": "^2.0" 就不会升到 3.x)。如果你改过 composer.json 但没生效,大概率是锁文件在“守旧”。
用 composer update --with-all-dependencies 强制刷新整棵树
这是最常用且安全的强制更新方式:它会重新解析整个依赖图,对所有直接和间接依赖都按当前 composer.json 的约束重新计算版本,同时更新 composer.lock。不是暴力重装,而是“重新协商”。
常见错误现象:composer update foo/bar 只更新该包及其直系子依赖,其他分支可能卡在旧版,导致冲突或行为不一致。
- 想更新全部?用
composer update --with-all-dependencies - 只想更新某几个包及其子依赖?写成
composer update foo/bar bar/baz --with-all-dependencies - 加
-v看详细解析过程:composer update --with-all-dependencies -v,能帮你判断是否真触发了重计算
慎用 composer update --ignore-platform-reqs
当遇到 Your requirements could not be resolved 卡在 PHP 或扩展版本检查时,这个参数会跳过平台约束。但它不解决根本问题——比如你本地是 PHP 8.3,而某个包声明 "php": "^7.4 || ^8.0",它就可能选一个不再维护的旧版分支,后续运行时报错。
真正该做的是先确认目标环境支持的 PHP 版本,再调整 config.platform.php 声明,例如:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
"config": {
"platform": {
"php": "8.3.0"
}
}
这样既绕过本地环境限制,又让依赖解析结果可复现。
composer install 不会更新依赖树,别指望它
很多人误以为删掉 vendor 再跑 composer install 就等于“重装最新版”,其实它只按 composer.lock 安装——哪怕 composer.json 已更新,lock 文件没变,安装的就是老版本。
所以流程必须是:修改 composer.json → 运行 composer update --with-all-dependencies → 提交新的 composer.lock。
容易被忽略的一点:CI/CD 流程中如果只执行 composer install,那团队成员本地手动 update 后提交的 lock 文件差异,很可能被静默覆盖或引发合并冲突。

















