composer 不自动生成变更日志,需用 composer show --outdated 定位实际更新包,再依版本查 github/gitlab 等来源的 changelog,注意 tag 命名差异与 semver 例外,并校验 lock 文件引用版本。

Composer 本身不提供生成统一变更日志的命令
直接执行 composer update 或 composer install 不会自动生成 changelog;Composer 的核心职责是依赖解析与安装,日志类功能不在其设计范围内。想拿到所有依赖包的变更记录,必须借助外部工具或手动拼接。
用 composer show --outdated 快速定位哪些包实际发生了变更
这是最轻量、最可靠的起点。它只列出版本变动(含 major/minor/patch),且仅显示当前 lock 文件与仓库最新版的差异,避免误判未更新的包。
- 运行前确保已执行过
composer update,否则结果反映的是「可更新但未更新」的状态,不是真实变更 - 输出中每行格式为:
vendor/package-name 1.2.3 -> 1.3.0,箭头右侧是目标版本,可用于后续查 changelog - 加
--direct参数可过滤掉间接依赖,聚焦你显式声明的包
按包逐个抓取 GitHub/GitLab 的官方 changelog 链接
绝大多数主流 PHP 包把变更记录放在 CHANGELOG.md 或 releases 页面,路径有规律可循,但需注意来源差异:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- GitHub 包:通常为
https://github.com/vendor/package-name/releases/tag/vX.Y.Z - GitLab 包:多为
https://gitlab.com/vendor/package-name/-/releases/vX.Y.Z - 部分包(如 Symfony)把 changelog 放在独立文档页,例如
https://symfony.com/changelog#v6.4.0 - 有些包没维护 changelog(尤其小众或个人项目),
composer show vendor/package-name中的homepage字段可能指向其文档首页,需人工确认
用脚本聚合变更内容时,警惕版本号语义与 tag 命名不一致
很多包的 Git tag 不严格遵循 v1.2.3 格式——比如用 1.2.3(无 v 前缀)、release/1.2.3,甚至混用字母(alpha-1.2.3)。直接拼 URL 很容易 404。
- 先用
git ls-remote --tags https://github.com/vendor/package-name.git查真实 tag 列表(需网络+权限) - 或改用 GitHub API:
curl -s "https://api.github.com/repos/vendor/package-name/releases/tags/v1.2.3",检查 response 状态码 - 别假设所有包都用 SemVer:Laravel 的 minor 版(如 10.10.0)可能含 breaking change,而 monolog 的 patch 版(2.9.1)也可能调整行为
真正难的不是拉日志,而是对齐「哪个 commit 被标记为哪个版本」「这个版本是否真的被你的 composer.lock 引用」——漏掉这一层校验,生成的日志就是错的。










