Composer不提供包更新历史或功能演进视图,composer show -a仅列出可用版本号,无变更说明;需通过GitHub/GitLab的CHANGELOG、Releases页面或git diff查看实际改动。

Composer 本身不提供包的更新历史或功能演进视图,它只管“装哪个版本”,不管“这个版本改了什么”。想了解依赖项的功能演进,必须跳出去——靠 GitHub/GitLab 的 CHANGELOG、releases 页面或 Git 提交差异。
composer show --all 只列版本号,不说明改了什么
运行 composer show -a vendor/package 能看到所有可用版本(比如 v2.8.0、v2.9.0、v3.0.0),但它不告诉你每个版本新增了哪些 API、修复了什么 bug、是否破坏兼容性。
- 输出纯文本列表,无时间戳、无变更摘要、无链接
- 依赖本地 Packagist 缓存,可能比 GitHub 上少一个 tag(尤其刚发布几分钟内)
- 私有包若未配置
repositories,根本不会出现在结果里 - 废弃(abandoned)版本默认不显示,但它们可能仍在线上环境被引用
查 CHANGELOG.md 或 Releases 页面才是正解
绝大多数主流包(如 monolog/monolog、symfony/http-foundation)会在 GitHub/GitLab 仓库根目录放 CHANGELOG.md,或用 GitHub Releases 功能发布带描述的版本。
- 先用
composer show vendor/package看source字段:如果是https://github.com/xxx/yyy.git,就直接打开对应 URL,加/blob/main/CHANGELOG.md或点Releases标签页 - 有些包把日志放在
docs/CHANGELOG.md或用UPGRADE-*.md分版本说明升级注意事项 - 如果
composer.json里有homepage字段(比如"https://laravel.com"),优先去官网文档找 “Release Notes” - 注意:CHANGELOG 内容由维护者人工维护,可能滞后或不全;GitHub Releases 更可信,因与 tag 强绑定
用 git diff 查两个版本间实际代码变化
如果你用 "prefer-source": true 安装过该包,vendor 目录下就是完整 Git 仓库,可直接执行 diff:
git -C vendor/vendor/package diff --stat v2.8.0..v2.9.0
这能快速看出改了多少文件、是否动了公共接口、是否有大量测试更新。但前提是:
- 该包确实用 Git 发布(
source类型非dist) - 你本地有这两个 tag(
git fetch --tags可同步) - 你知道确切的旧版和新版号(
composer show -a可辅助确认) - diff 结果需人工解读,不适合 CI 自动化判断“是否安全升级”
别信 composer.lock 里的 time 字段当“发布时间”
composer.lock 中每个包条目都有 time 字段,但它记录的是你本地执行 composer update 并写入 lock 文件的时间,不是作者 push tag 的时间。同一项目在不同机器上生成的 lock 文件,这个字段几乎肯定不同。
真正可靠的发布时间,得查 Packagist API:curl -s "https://packagist.org/packages/vendor/package.json" | jq '.package.versions."v2.9.0".time'
返回的是 UTC 时间字符串,比如 "2024-09-21T15:33:02+00:00" —— 这才是作者打 tag 并同步到 Packagist 的时刻。
功能演进不是靠命令拼凑出来的,是靠你主动定位到那个仓库、打开那个 CHANGELOG、对照那两个版本号、读清那几行 breaking change。工具只是帮你更快找到入口,没法代替阅读。











