composer outdated 默认仅检查 composer.json 中直接声明的依赖,不扫描间接依赖;需加 --all 才显示全部包(含子依赖),红/黄/! 色标分别表示主版本跃迁、补丁更新及 bc-breaking 风险。

composer outdated 显示所有可更新的包
直接运行 composer outdated 就能列出当前项目中所有有新版本可用的依赖包,包括主依赖和它们的子依赖。默认只显示语义化版本(SemVer)允许范围内的更新,比如 "monolog/monolog": "^2.0" 锁在 2.x,那么 2.10.0 会显示,但 3.0.0 不会——除非你加 --major。
常见错误是误以为它只检查顶层 require 的包,其实它默认递归扫描整个 vendor/ 树;但如果你用 --direct,就只看 composer.json 里手动写的那几行。
-
composer outdated:常规检查,安全、兼容范围内可升的版本 -
composer outdated --direct:只看你自己require的包,跳过间接依赖 -
composer outdated --minor:只显示次要版本更新(如 2.1 → 2.9),忽略补丁版(2.1.0 → 2.1.5) -
composer outdated --major:强制显示跨主版本的更新(如 2.9 → 3.0),可能破坏兼容性
加 --format=json 看结构化数据方便脚本处理
人工扫列表容易漏,尤其当输出几十行时。用 --format=json 能拿到标准 JSON,字段清晰:每个包有 name、version(当前)、latest(最新稳定版)、latest-status(semver-compatible / not-comparable 等)。
示例片段:
{
"monolog/monolog": {
"version": "2.8.0",
"latest": "2.9.1",
"latest-status": "semver-compatible"
}
}
注意:latest-status: "not-comparable" 表示版本号格式不标准(比如带 -dev 或自定义前缀),Composer 不敢自动判断是否安全升级,得你手动查 changelog。
为什么 composer update 不自动升级所有包?
因为 composer update 默认只更新 composer.lock 中已锁定的版本,不会突破 composer.json 的约束条件。比如你写的是 "guzzlehttp/guzzle": "~7.0",就算 8.0 发布了,composer update 也不会动它——除非你显式执行 composer update guzzlehttp/guzzle 或删掉版本约束再跑。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
这也解释了为什么 outdated 和 update 看起来“不一致”:前者告诉你“有新东西”,后者遵守你的契约不越界。
- 想批量升到最新兼容版?用
composer update --with-all-dependencies - 想升某个包及其所有子依赖?用
composer update vendor/package-name --with-dependencies - 升级前务必
git status确认没改composer.lock,否则 merge 冲突很难解
忽略某些包不参与 outdated 检查
有些包你明确不想升级(比如定制过源码的 fork),又不想每次都被 outdated 提醒。可以在 composer.json 里加 minimum-stability 或用 platform 配置骗过检查,但更干净的做法是加 config.platform 锁死版本,或用插件(如 roave/security-advisories)反向屏蔽。
不过最常用的是 --ignore 参数:
composer outdated --ignore=laravel/tinker,phpunit/phpunit
注意:这个参数只影响显示,不改变 lock 文件或依赖解析逻辑;且不能写通配符,必须精确到 vendor/name 格式。
真正容易被忽略的是 dev 分支或 dev-master 类型的包——outdated 默认不检查它们,因为“开发版”没有稳定版本号可比。如果项目里混用了 dev- 版本,得先 composer update 拉一次最新快照,再跑 outdated 才能看到变化。










