不能。composer show和outdated仅读取installed.json或元数据,不拉取Git提交、不解析CHANGELOG.md、不访问GitHub Releases API,故无法显示更新日志;可靠路径是手动查git log或官方文档页。

Composer 本身不提供变更日志审查能力,所谓“审查变更日志”必须靠组合命令 + 外部工具链实现——直接跑 composer show 或 composer update --dry-run 都看不到任何 changelog 内容。
为什么 composer show 和 composer outdated 都不显示日志
这两个命令只读取 vendor/composer/installed.json 或远程包元数据(如 name/version/description),不拉取 Git 提交、不解析 CHANGELOG.md、不访问 GitHub Releases API。即使包维护者写了规范的变更日志,Composer 也完全无视。
-
composer show vendor/package输出里可能有homepage字段,但那只是个链接,不会自动打开或抓取内容 -
composer outdated --format=json+只输出name、version、latest,没有changelog_url或diff_summary - 私有包、GitLab 自托管包、zip 分发包基本无标准日志入口,
composer命令对此毫无感知
真正能拿到日志的两个实操路径
不是“有没有”,而是“怎么拿”。目前只有两条可靠路径,且都需手动介入:
- 查
git log:进vendor/vendor-name/package-name目录,确认它是 source 模式安装(含.git),再运行git log v1.2.3..v2.0.0 --oneline CHANGELOG.md—— 注意要先用composer show确认当前和目标版本号,且该文件在两次 tag 间确实被修改过 - 查官方文档页:Laravel、Symfony、Doctrine 等主流包把变更日志放在 docs 网站而非 GitHub;
composer show输出的homepage或support.source字段常指向那里,比如https://symfony.com/changelog/6.4
别指望自动拼 URL:不同包格式差异极大(/releases、/blob/main/CHANGELOG.md、/docs/upgrade-major),没统一规则。
立即学习“PHP免费学习笔记(深入)”;
CI 中如何让依赖变更强制可审查
关键不是“看日志”,而是“让每次更新都留下人类可读的上下文”。推荐在 PR 流程中固化三件事:
- CI 步骤中运行
composer outdated --direct --format=json > outdated.json,再用轻量脚本提取name、current、latest、type(require / require-dev),生成 Markdown 表格追加到 PR comment - 配置
.github/CODEOWNERS,当composer.json或composer.lock变更时,自动 @security-team 或 @infrastructure - 禁止裸跑
composer update:所有更新必须指定包名(composer update monolog/monolog)或带--with-dependencies,避免隐式升级 dev 工具污染 prod 环境
最容易被忽略的复杂点
不是技术做不到,而是语义难对齐:一个 v2.0.0 → v3.0.0 的升级,可能是纯 bugfix(改了 1 行),也可能是 BC Break(重写了整个接口)。composer outdated 不告诉你这是哪类变更,git log 又得你人工判断哪些 commit 影响行为。最实际的做法是——把每次 composer update 当作一次代码变更,和 src/ 下的修改同等对待:写清楚动机、贴出关键 diff、要求对应领域 owner 批准。日志只是辅助,人脑判断才是不可跳过的环节。



















