composer outdated 命令用于只读检查项目中已过期的依赖包,列出包名、当前版本及可升级到的最新兼容版本,默认遵循 composer.json 版本约束,支持 --direct、--minor、--patch、--all 和 --format=json 等选项以提升实用性。

Composer 的 outdated 命令用于快速列出项目中已过期的依赖包,即当前安装版本低于其最新稳定版(或符合版本约束的更高兼容版本)的包。它不修改 composer.json 或执行更新,只做“只读检查”,是日常维护和安全审计的重要起点。
基础用法:查看所有过期依赖
在项目根目录下运行:
composer outdated该命令会显示三列信息:包名、当前已安装版本、可升级到的最新兼容版本。默认只显示满足当前 composer.json 中版本约束(如 ^2.4 或 ~1.8)的最新可用版本,不会推荐破坏性更新(如从 v2 升到 v3)。
常用选项提升实用性
-
--direct:仅显示直接在
composer.json中声明的依赖(忽略间接依赖/子依赖),适合聚焦你主动引入的包 -
--minor 或 --patch:分别限制只显示次要版本或补丁版本的更新(例如
2.4.1 → 2.4.5),避免意外升级到含新特性的次要版 -
--all:显示所有可能的更新(包括超出当前约束的版本),帮助评估是否需要调整
composer.json中的版本号 - --format=json:输出 JSON 格式,便于脚本解析或集成进 CI 流程
理解“过期”的实际含义
一个包被标记为过期,并不等于“必须立刻升级”。关键要看:
- 版本约束是否仍宽松(比如写的是
"monolog/monolog": "^2.0",而当前装的是2.3.0,最新是2.10.0,就属于正常过期) - 新版是否修复了你关心的安全漏洞(可配合
composer audit或 Symfony Security Checker 使用) - 变更日志中是否有破坏性改动或行为变更,即使版本号没跨大版本(如某些包在 patch 版本里调整了异常抛出逻辑)
结合 update 使用更稳妥
发现过期包后,不要直接全量更新。推荐做法是:
- 对关键包单独更新:composer update vendor/package-name
- 加 --with-dependencies 同时更新其子依赖,减少兼容风险
- 更新后务必运行测试(
phpunit、功能验证、CI 流程),尤其关注日志、HTTP 客户端、序列化等易受依赖影响的模块










