Composer本身不提供查看更新日志的命令,所有类似composer show --changelog的尝试均失败;需用composer show vendor/package -s获取源码地址,再手动访问GitHub的CHANGELOG.md或releases页面。

composer 本身不提供查看更新日志的命令,所有试图用 composer show --changelog、composer log 或 composer outdated --verbose 获取变更说明的操作都会失败——它压根不拉、不存、不解析任何 changelog。
composer show -s 只给地址,不给日志
composer show 读的是 vendor/composer/installed.json 和 composer.lock 的本地快照,里面只有版本号、描述、依赖列表,没有提交记录,也没有维护者写的更新摘要。
-
composer show vendor/package -s输出的source.url是唯一可靠线索,比如<a href="https://www.php.cn/link/b71ae9a72156d7961f68be39331f4f28">https://www.php.cn/link/b71ae9a72156d7961f68be39331f4f28</a> - 去掉末尾
.git,拼上/blob/main/CHANGELOG.md或/releases,才是真实日志入口 - 如果
source字段为空(常见于 dist 安装或私有包),就得查composer show vendor/package输出里的homepage,再手动跳转
常见错误现象:反复执行 composer show monolog/monolog | grep -i changelog,结果什么也找不到——因为字段根本不存在。
composer outdated 只报版本号,不报改了啥
composer outdated 的输出是静态比对结果,例如:
monolog/monolog 3.4.0 → 3.5.0
- 它不联网查 GitHub Releases,也不解析
CHANGELOG.md - 不告诉你这版是否修复了
log() throws on null context这类关键 bug - 也不标出 BC break(比如
LoggerInterface::log()签名变更)
实用技巧:
- 加
--direct过滤掉子依赖,只看你自己require的包 - 加
--format=json方便脚本提取目标版本,再喂给后续工具(如curl或gh api) - 别信
--security-only能代替日志——它只标“有漏洞”,不标“怎么修”
真要看到更新内容,得进 vendor 目录或调 GitHub API
前提是该包以 source 方式安装(即 "prefer-source": true 或安装时加了 --prefer-source):
- 进目录:
cd vendor/monolog/monolog - 查两个版本间变更:
git log --oneline v3.4.0..v3.5.0 -- CHANGELOG.md - 看代码差异:
git diff --stat v3.4.0..v3.5.0 src/
如果没装 source,又不想手动开浏览器:
- 用
composer show -s vendor/package拿到仓库地址 - 调 GitHub CLI:
gh api repos/{owner}/{repo}/releases/tags/v3.5.0 - 注意 tag 名可能不含
v前缀(如3.5.0而非v3.5.0),得试两遍
容易踩的坑:
- 私有包或 GitLab 托管的项目,GitHub CLI 失效,得换
curl+ 个人 token -
CHANGELOG.md可能在stable分支而非main,拼错路径就 404 - 有些包把日志放在
UPGRADE.md或文档站(如laravel.com/docs/11.x/changelog),homepage 字段比 source 更准
别指望 composer update --dry-run 带日志
composer update --dry-run -vvv 看起来很全,但它跳过锁文件校验、平台扩展检查、甚至部分缓存验证。真实执行时可能因 ext-redis 缺失而失败,但 dry-run 却沉默通过。
更危险的是:它根本不触发任何远程请求,连 Git clone 都不模拟,所以不可能带出 changelog。
升级前真正有效的做法是:
- 先用
composer show vendor/package --latest确认最新版号和发布日期 - 再立刻打开对应包的 Releases 页面,盯住 “What’s Changed” 区域
- 若涉及主版本升级(如
^2.0 → ^3.0),必须顺手扫一眼UPGRADING.md或官方迁移指南
最常被忽略的一点:很多包的 changelog 不在 GitHub,而在官网文档页;homepage 字段比所有自动化脚本都靠谱。


















