先跑 composer outdated --direct 才能精准定位需关注的显式依赖,它只扫描 require 中手动声明的包,避免 require-dev 和传递依赖干扰;带 ! 表示存在已知 BC-breaking 更改,必须查 UPGRADE.md;无输出不等于安全,可能受 minimum-stability 或 platform 配置限制。

先跑 composer outdated --direct,它能暴露你真正该管的包——不是所有“可升”版本都安全,也不是所有没输出就代表没问题。
查哪些包真有新版本、带不带破坏性变更
默认 composer outdated 只扫 require 里你亲手写的包,不看 require-dev 或传递依赖,避免被无关更新干扰。加 --direct 是关键,否则可能漏掉你改过约束却没生效的包。
- 带
!标记的行(如monolog/monolog 2.9.1 → 2.10.0 !)表示该包在conflicts字段声明了 BC-breaking 更改,必须查它的UPGRADE.md或 GitHub Release 页里的 “Breaking changes” 小节 - 没输出?不等于没风险——可能是
"minimum-stability": "stable"挡住了候选版本,或config.platform声明的 PHP 版本太低,导致新版直接被过滤 - 想看全貌(比如排查
phpunit拉低了symfony/console),得加--all,但它会混入大量 dev 工具,需人工过滤
确认当前装的是不是你“以为”的版本
composer show -i 才是真相。它读 vendor/composer/installed.json,不是 composer.json 的约束,也不是 composer.lock 的快照。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 查单个包:
composer show laravel/framework -i,输出里version和括号里的[10.42.0]才是你本地真实运行的版本 - 对比
composer show laravel/framework -l,看requires里写的约束(如^10.0)和实际安装版本是否匹配——不匹配说明锁文件或缓存异常 - 如果
show -i报错或为空,vendor/目录大概率没装全,别急着升级,先composer install
模拟升级过程,看它到底想动什么
composer update --dry-run 不写任何文件,但完整走一遍 SAT 求解器逻辑,比 outdated 更接近真实影响。
- 末尾会列出所有将被升级、降级、删除的包,以及卡点提示,例如
Because package-a v2.1 requires symfony/console ^5.4, and package-b v3.0 requires symfony/console ^6.0 - 加
--with-all-dependencies能看出连带影响范围:如果输出里出现上百行变更,说明波及面过大,建议退回,改用--with-dependencies小步推进 - 若卡在
Resolving dependencies through SAT阶段不动,说明存在强冲突,此时别等,直接切到composer why-not vendor/package:desired-version定位阻断链
最常被忽略的一点:composer outdated 和 update --dry-run 都受 config.platform 影响。如果你在 composer.json 里写了 "platform": {"php": "7.4"},但实际环境是 PHP 8.2,那所有检查结果都会按 PHP 7.4 模拟——升级后运行时炸掉,跟检查结果完全无关。

















