composer show vendor/package-name 是最轻量方式,直接读取本地 vendor/ 和 composer.lock,显示已安装版本、源地址、描述等元信息;但不提供更新时间或 changelog,需跳转 github 查 releases。

如何用 composer show 查看包的版本与更新时间
直接查一个包的当前安装版本、最新稳定版和最后更新时间,composer show 是最轻量的方式。它不依赖外部 API,只读本地 vendor/ 和 composer.lock,速度快且可靠。
常用组合:
-
composer show vendor/package-name—— 显示已安装版本、源仓库地址、描述、依赖项等 -
composer show -a vendor/package-name—— 加-a(--all)会列出所有可用版本(需联网),但注意:它只显示 tag 名,不带日期或提交哈希 -
composer show --tree vendor/package-name—— 查该包在依赖树中的位置,适合排查冲突
⚠️ 注意:composer show 不提供每个版本的发布日期或变更摘要,它本质是元信息快照,不是 changelog 查询工具。
用 composer outdated 快速识别可更新的包及版本跨度
composer outdated 是判断“要不要升”最实用的命令。它对比 composer.lock 与 Packagist 上的最新匹配版本,标出语义化版本允许范围内的可升级项。
关键用法:
-
composer outdated—— 默认只显示主版本号变化(如^2.0范围内从2.1.3 → 2.3.0) -
composer outdated --direct—— 只检查composer.json中直接声明的包,跳过依赖链里的间接包 -
composer outdated --minor-only或--patch-only—— 限制只显示小版本或补丁级更新,避免意外升到3.0.0 -
composer outdated --format=json—— 输出 JSON,方便脚本解析(例如 CI 中自动告警)
⚠️ 容易踩的坑:outdated 的结果受 composer.json 中版本约束影响。如果写死 "monolog/monolog": "2.8.0",它永远不提示更新;若写 "^2.8",则可能跨多个 patch/minor 版本。
查 changelog 必须跳转到源仓库,composer 本身不托管日志
Composer 没有内置的 changelog 查看命令——它只是包管理器,不是文档平台。真正的更新日志(含 breaking change、修复列表、迁移说明)全在包的 Git 仓库里。
高效定位方式:
- 先用
composer show vendor/package-name找source字段,通常是https://github.com/vendor/package - 访问该地址,重点看:
CHANGELOG.md、UPGRADE.md、GitHub Releases 页面(/releases)、或git tag -l --sort=-v:refname | head -n 10(本地 clone 后查 tag 时间顺序) - 想批量查?可以写个小脚本:用
composer show --format=json提取 source URL,再用curl -s https://api.github.com/repos/{owner}/{repo}/releases/latest | jq '.published_at, .body'
⚠️ 常见误区:有人以为 composer update --dry-run 会打印变更说明,其实它只模拟依赖解析,不拉 changelog。
为什么 composer update 不提示具体改了什么
因为 Composer 的设计哲学是「确定性优先」:它确保锁文件能复现相同依赖树,而非解释每次更新的影响。日志类信息交由人或第三方工具处理。
如果你需要自动化感知变更内容,可行路径有:
- CI 流程中,在
composer update后执行git diff composer.lock,观察哪些包版本字段变了 - 用
composer-require-checker或roave/security-advisories等插件补充安全/兼容性提示 - 配合 GitHub Dependabot 或 Snyk,它们会在 PR 中自动附上每个更新的 release note 链接
真正麻烦的从来不是查版本,而是确认某个 minor 升级是否偷偷改了接口签名,或者某 patch 是否修复了你正遇到的 bug——这得靠读源码、看测试用例、或跑 regression test,没有命令能替你做决定。











