composer update vendor/package-name是唯一可靠方式,必须用完整包名(如monolog/monolog),漏/或加引号会导致报错或全量更新;它仅按composer.json约束更新该包及其未被锁死的直系依赖,其他顶层包不变。

composer update vendor/package-name 是唯一可靠写法
想只更新一个包,必须用完整包名加斜杠,比如 composer update monolog/monolog。漏掉 /(如 composer update monolog)会报错 Package "monolog" not found;加引号(如 composer update "monolog/monolog")可能被 shell 忽略参数,退化成全量更新。
这个命令的行为是确定的:
- 只按
composer.json中该包的版本约束(如"^2.8")拉取最新兼容版 - 仅顺带升级它**直系依赖**中未被其他顶层包锁死的部分(例如
psr/log若需升到^2.0才能装monolog2.10,就会升) - 完全不动
laravel/framework、guzzlehttp/guzzle等其他顶层包 - 修改只写入
composer.lock中对应包的version、source、dist字段
为什么 --with-dependencies 不再可用
--with-dependencies 在 Composer 2.2+ 已被移除,执行会直接报错:Unrecognized option: --with-dependencies。现在要连带更新直系依赖,得用 --with 参数:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer update guzzlehttp/guzzle --with psr/http-message—— 只升指定的直系依赖 -
composer update guzzlehttp/guzzle --with-all-dependencies—— 升整棵依赖树(含子依赖的子依赖) - 多个包用空格分隔:
--with psr/http-message nyholm/psr7,不能用逗号或换行
批量更新多个包的正确姿势
一次性更新几个相关包,直接在命令后并列写出完整包名:
composer update symfony/http-foundation symfony/routingcomposer update monolog/monolog guzzlehttp/guzzle --with psr/http-message- 包名之间必须用空格,不能有引号、逗号或换行
- 如果某个包在
composer.json中被锁死(如"monolog/monolog": "2.9.0"),update不会动它——得先改成"^2.9"或删掉具体版本号
更新后发现别的包也变了,正常吗
正常,只要变的是目标包的**直系依赖**,且旧版本无法满足新版本的 require 声明。比如 monolog/monolog:^3.0 明确要求 "symfony/console": "^6.2",而你 composer.lock 里是 6.1,那它就必须升。
这种连带升级无法禁掉,它是语义化版本 + 依赖求解的必然结果:
- 预判影响范围:运行
composer show monolog/monolog查它的require列表 - 确认是否真只动了目标包:加
--dry-run -n,看输出是否只含目标包及其直系依赖 - 升完立刻
git diff composer.lock,只应看到packages下对应包的字段变化;如果一堆dist.sha256都变了,大概率是platform.php配置和当前 PHP 版本不一致,触发了全量重解析
composer.json 后必须提交 composer.lock,否则队友 composer install 还是旧版。

















