composer outdated –direct 只列出 composer.json 中声明的直接依赖更新,不包含子依赖;对比 composer.lock 与 Packagist 最新稳定版,仅显示有更新的直接包,带 * 表示主版本不兼容升级。

直接运行 composer outdated --direct 即可只列出项目 composer.json 中声明的直接依赖(即 root requirements),不包含它们所依赖的子依赖(transitive dependencies)。
确认是否真的只查直接依赖
该命令默认行为就是聚焦于你手动写在 composer.json 的 require 和 require-dev 里的包。它会对比当前锁定版本(composer.lock)与 Packagist 上可用的最新稳定版本,仅显示有更新的直接依赖。
- 不会显示例如
symfony/polyfill-php81这类被symfony/framework-bundle拉进来的间接包 - 如果某个直接依赖本身已是最新版(或满足约束且无更高兼容版),就不会出现在列表中
- 带
*标记的条目表示存在语义化版本不兼容的更新(如从 v2.x 升到 v3.x)
常用搭配用法
提升可读性或辅助升级决策:
-
composer outdated --direct --minor-only:只显示次版本更新(如 2.3 → 2.4),跳过主版本升级 -
composer outdated --direct --format=json:输出 JSON,适合脚本解析 -
composer outdated --direct --all:同时检查require和require-dev(默认只查require)
注意几个易忽略点
避免误判或漏检:
- 确保已执行过
composer update或至少有有效的composer.lock,否则比对基准可能过时 - 某些包可能设置了
"minimum-stability": "stable"或"prefer-stable": true,影响“最新版”的判定逻辑 -
--direct不等于“安全更新”,需额外用composer audit(Composer 2.5+)或security-checker工具检查漏洞
基本上就这些。用好 --direct 能帮你快速聚焦维护重点,避免被嵌套依赖的更新噪音干扰。
以上就是如何使用Composer outdated –direct只检查直接依赖的过期包?(项目维护)的详细内容,更多请关注php中文网其它相关文章!