composer show --outdated 与 composer outdated 是别名关系,仅显示包名、已安装版本、约束范围内最新稳定版本三列信息,不提供更新日志、安全提示或升级影响分析;无输出表示所有包均满足其 composer.json 版本约束下的最新稳定版。

composer show --outdated 和 composer outdated 是同一个命令,只是别名关系——它不显示更新日志,只告诉你“装了啥”和“能升到啥”,别指望它自动告诉你该不该升、为什么升、升了会怎样。
为什么 composer show --outdated 没输出?
不是命令坏了,是它默认只报告「有可升级版本」的包。没输出 = 当前所有已安装包都满足其版本约束下的最新稳定版(注意:不是绝对最新,而是你 composer.json 允许范围内的最新)。常见真实原因:
- 你的
composer.json里写了死版本,比如"phpunit/phpunit": "9.5.10",那即使 9.5.13 发布了,也不会出现在结果里 - 包被
replace或provide替代(如用symfony/polyfill补原生函数),默认不参与检查 -
composer.lock和composer.json不一致,导致比对基础失效(此时先跑composer update --dry-run看差异) - 你用了
minimum-stability: stable(默认),而新版本是beta或rc,直接被过滤
composer show --outdated 三列数字到底怎么看?
输出固定三列:vendor/package、installed、latest。关键在后两列:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
installed来自composer.lock,是你当前项目实际加载的版本 -
latest是 Packagist 上「当前稳定性策略下」的最高稳定 tag,受composer.json版本约束限制(比如"monolog/monolog": "^2.0"就不会出现v3.0.0) - 两列一致 → 没过时;不一致 → 才真要关注,但不等于“必须升”
怎么查插件或 dev 包是否过时?
默认情况下,composer show --outdated 只查 require 下的运行时依赖,插件和 require-dev 包都不在视野内:
- 加
--all强制检查所有已安装包(含插件、dev 包、甚至被replace的) - 插件是否生效,优先看
composer show -l输出中带[plugin]标记的行 - 想只盯住自己写的依赖(排除层层嵌套的子依赖),加
--direct - CI 中建议组合使用:
composer show --outdated --direct --minor-only --format=json,再用jq过滤
它和 composer update 对不上,怎么办?
composer show --outdated 是静态元数据比对,composer update 是动态依赖解析——两者逻辑不同,结果自然可能打架:
- outdated 显示某包可升,但 update 报 conflict → 大概率是其他依赖锁死了它的主版本(用
composer depends vendor/package查谁在拖后腿) - outdated 没列某个包,但你知道它有新 patch → 它可能被写死在
composer.lock的 commit hash 或dev-main分支,而 outdated 默认只看 tagged release - 最可靠验证方式:跑
composer update --dry-run vendor/package,它才是真正模拟升级路径的“试金石”
别把 show --outdated 当升级决策工具,它只负责报信。真正决定升不升、怎么升,得看 CHANGELOG、BC Break 提示、你的代码有没有调私有方法,以及 --dry-run 能不能过。

















