composer update --with 不限制更新范围,仅扩展依赖图计算;真正只更新指定包需显式列出包名,如 composer update guzzlehttp/guzzle phpunit/phpunit。

composer update --with 只更新指定包,但得先搞清它不支持通配符
这个参数不是万能开关,--with 的作用是「把指定包加入本次更新的依赖图计算范围」,而不是「只更新这几个包」。如果你只写 composer update --with monolog/monolog,Composer 仍会更新 monolog/monolog 的所有依赖(包括它的依赖的依赖),甚至可能连带升级你没提过的其他包——只要它们被当前锁文件和 composer.json 中的约束允许且有新版本。
-
--with必须配合具体包名,不接受monolog/*或monolog/这类写法,否则报错:Package "monolog/*" not found - 如果想真正「只动某几个包」,必须用
composer update vendor/package1 vendor/package2这种显式列出的方式 -
--with更适合「我改了 A 包,现在要确保 B 包也参与兼容性重算」这类场景,比如你在开发中替换了symfony/console的本地副本,同时想让laravel/framework也重新检查是否适配
真正限制更新范围:用包名列表代替 --with
想安全、精准地只更新 guzzlehttp/guzzle 和 phpunit/phpunit?直接把它们列在命令后面:
composer update guzzlehttp/guzzle phpunit/phpunit
这样 Composer 会:
- 只解析这两个包及其子依赖的版本约束
- 保持其他所有包的版本严格不变(哪怕锁文件里有更高兼容版本)
- 跳过对未提及包的依赖图重算,速度明显更快
注意:如果这两个包之间有冲突约束(比如一个要求 psr/http-client ^1.0,另一个要求 ^2.0),Composer 会失败并提示无法解决,而不是悄悄降级或忽略。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
想冻结其他包?别只靠命令行,还得看 composer.json
光靠一次 composer update xxx 不足以长期锁定无关包。下次运行 composer update(无参数)时,一切照旧放开更新。要持久限制,得在 composer.json 里做两件事:
- 把不想动的包写进
"require"并固定版本号,比如"monolog/monolog": "2.9.1"(不带^或~) - 或者用
"minimum-stability": "stable"+"prefer-stable": true防止意外升到 RC/Beta 版 - 极端情况可加
"platform": {"php": "8.1.0"}模拟环境约束,间接阻止某些包升级(因为新版可能要求 PHP 8.2)
常见翻车现场:--with 和 --with-all-dependencies 混用
有人试过 composer update --with guzzlehttp/guzzle --with-all-dependencies,结果整个依赖树都刷了一遍。这是因为 --with-all-dependencies 会让 Composer 把「指定包的所有传递依赖」也拉进来参与计算——等价于手动把几十个包全列出来。
- 除非你明确知道 guzzle 的每个下游包(比如
psr/http-client、ralouphie/getallheaders)都需要重验,否则别加这个 flag - 查依赖链用
composer depends guzzlehttp/guzzle比瞎猜靠谱 - 执行前先加
--dry-run看看 Composer 打算动哪些包:composer update guzzlehttp/guzzle --dry-run
最易被忽略的是:锁文件(composer.lock)的粒度比你想的粗。即使命令只写了两个包,只要它们的某个共同依赖(如 symfony/polyfill-php80)在锁文件中版本偏低,Composer 仍可能升级它——这是为了满足新版本的 require 约束,不是 bug,是设计使然。

















