composer show --outdated 仅输出包名、当前已安装版本、最新稳定版本三列信息,不显示 changelog、commit history 或版本差异;需结合 GitHub API、git log/diff 或项目文档手动核查更新详情。

composer show --outdated 不会显示更新记录(changelog、commit history 或版本间差异),它只列出过期包及其当前/最新可用版本号 —— 想看“详细更新记录”,必须配合其他命令或外部工具。
composer show --outdated 输出内容到底包含什么
该命令本质是比对 composer.lock 中记录的已安装版本与 Packagist 上当前稳定分支(通常是 stable)的最新版,输出三列:
- 包名(
vendor/package) - 当前已安装版本(来自
composer.lock) - 可升级到的最新稳定版本(不含 RC/beta/dev 分支)
它不显示:
- 版本之间新增了哪些功能
- 是否含破坏性变更(BC break)
- 某次更新修复了哪个 issue
- 提交日志或 tag 注释
想看某个包的真实更新记录,得用这些组合方式
以查看 monolog/monolog 的更新细节为例:
- 先用
composer show monolog/monolog确认其源类型:source是git还是dist;若为git,说明本地有克隆副本(需开启prefer-source) - 查 GitHub 仓库地址:
composer show -s monolog/monolog | grep source,拿到 URL 后手动访问https://github.com/Seldaek/monolog/releases - 或直接用 CLI 工具:
git -C vendor/monolog/monolog log --oneline v2.8.0..v2.9.0(需已用prefer-source安装,且知道两个版本号) - 更通用的做法:用
composer outdated --format=json解析后,调用 GitHub API 获取/repos/{owner}/{repo}/compare/{old}...{new}
为什么 --outdated 默认不显示更新日志?
Composer 的定位是依赖管理器,不是 changelog 查阅器。设计上刻意避免网络 I/O 和外部依赖:
-
composer show --outdated仅读取本地composer.lock和缓存的 Packagist 元数据(~/.composer/cache/repo/https---packagist.org/packages.json) - 不主动请求 GitHub/GitLab API,也不解析
CHANGELOG.md或UPGRADE.md - 若启用
--direct,只过滤 root require 的包;加--all会显示所有嵌套依赖 —— 但依然没有日志
性能和稳定性优先,所以“更新记录”这件事,得交还给 VCS 平台或项目自身维护的文档。
一个快速验证更新影响的小技巧
在升级前,用以下命令预览变更范围(适合 Git 源安装):
composer update --dry-run monolog/monolog git -C vendor/monolog/monolog diff --stat v2.8.0..v2.9.0
注意:--dry-run 不写入 lock 文件,但会触发 Composer 解析依赖图;而 git diff --stat 能看出改了多少文件、是否有 src/ 外的变动(比如 tests/ 或 docs/),这对判断是否含 BC break 很有用。
真正要确认一次升级是否安全,不能只看版本号,得盯住 changelog 链接、BREAKING CHANGES 小节、以及 vendor 目录下实际代码的 diff —— Composer 本身不会替你读完那几页 Markdown。










