Composer无内置changelog命令,需通过composer show查源码地址、按约定路径访问CHANGELOG.md或Releases页面、用git diff对比版本差异,或借助changelog-linker工具生成链接。

Composer 本身不提供内置的变更日志(changelog)查看命令,composer update 或 composer install 都不会自动展示包的版本差异说明。要看到“改了什么”,得靠外部手段拼凑信息。
如何快速定位某包的变更日志 URL
绝大多数主流 PHP 包会把变更日志放在标准位置,Composer 不会帮你跳转,但你可以用约定俗成的路径快速访问:
- 优先查
CHANGELOG.md、CHANGELOG.md或changelog.md—— 大多数包放根目录或docs/下 - GitHub/GitLab 仓库通常在 Releases 页面(
https://github.com/vendor/name/releases)提供带版本摘要的发布记录 - 部分包使用
UPGRADE.md或UPGRADING.md专门描述破坏性变更 - 若包用了 Keep a Changelog 规范,
CHANGELOG.md结构清晰,可读性强
用 composer show 查版本与源码地址
composer show 是唯一能从本地锁文件中提取真实信息的 Composer 命令,它能帮你确认当前装的是哪个版本、从哪来的:
composer show monolog/monolog
输出里重点关注:
-
source字段:显示 VCS 类型(如 git)、URL 和 reference(通常是 commit hash),可直接粘贴进浏览器看对应提交 -
dist字段:给出 zip 包下载地址,有时附带 version tag(如v3.5.0),可用于反推 release 页面 - 若没写
source,说明是 dist-only 安装,此时只能依赖dist.url或包主页手动查
对比两个版本的 diff(适合技术验证)
当你知道旧版和新版(比如 2.9.0 → 2.10.0),又想跳过阅读文字日志直接看代码改了啥,可以借助 Git 差异:
- 克隆包仓库(如
git clone https://github.com/Seldaek/jsonlint.git) - 执行
git log v2.9.0..v2.10.0 --oneline CHANGELOG.md看日志文件的修改 - 或运行
git diff v2.9.0 v2.10.0 -- src/检查实际代码变动(注意路径是否匹配) - 别直接 diff 整个仓库——很多包含测试、CI 配置等无关内容,聚焦
src/、lib/、CHANGELOG.*即可
自动化方案:changelog-linker 工具
社区有轻量 CLI 工具 changelog-linker(需全局安装),能根据 composer.lock 自动生成各包的 changelog 链接:
composer global require jakub-onderka/changelog-linker<br>changelog-linker list
它会尝试匹配常见模式(GitHub Releases、CHANGELOG.md、readme 中的链接),输出类似:
monolog/monolog → https://github.com/Seldaek/monolog/releases/tag/3.5.0<br>symfony/console → https://github.com/symfony/console/blob/6.4/CHANGELOG.md
注意:
- 不是所有包都能识别成功,尤其私有包或非标准托管平台
- 它不解析内容,只给链接——你仍需点进去看
- 若项目用了自定义 packagist 或私有 repo,得手动配置映射规则
真正麻烦的不是找日志,而是判断某次 composer update 是否引入了 BC break:有些包把重大变更藏在 PR 描述里,有些压根不写 CHANGELOG,这时候只能靠 git blame + 锁文件比对 + 运行测试来交叉验证。











