composer show 不显示更新日志,仅输出静态元信息;变更日志需手动访问包源码地址的/releases或/CHANGELOG.md;composer outdated 仅提示可升级版本,不说明具体变更;本地安装时间需查文件系统而非 composer 命令。

composer show 不会显示更新日志
Composer 本身不抓取、不缓存、也不展示任何包的变更日志(changelog),composer show 输出的只是静态元信息:名称、描述、依赖、许可证,以及 source 地址——它甚至不会自动读取 support.changelog 字段(即使包在 composer.json 里声明了该字段)。
真正能查到日志的地方,永远在包维护者自己维护的外部位置。你得手动跳转过去,没有捷径。
-
composer show vendor/package -s查出源码地址(比如"source": "https://github.com/monolog/monolog"),然后拼上/releases或/blob/main/CHANGELOG.md - 有些项目把日志放在根目录的
CHANGELOG.md,可用curl -s https://raw.githubusercontent.com/laravel/framework/11.x/CHANGELOG.md | head -20快速扫一眼最新段落 - GitHub Releases 页面更权威:tag 时间、发布说明、是否含安全修复、是否为 breaking change,全在这里;Packagist 上的发布时间可能滞后或不准
用 composer outdated 看“能升到哪”,但不是“改了啥”
composer outdated 只告诉你「当前装的是 v2.8.0,允许升到 v2.9.0」,它不输出一行变更内容,也不区分这个 v2.9.0 是修了个 typo 还是重写了核心类。
它的输出受三个关键约束控制,常导致你以为“没更新”其实是被拦住了:
-
composer.lock滞后:改了composer.json但没跑composer update --lock,outdated仍按旧 lock 判定“当前版本” -
"minimum-stability": "stable"配置下,哪怕 v3.0.0-beta 已发,也不会出现在结果里;反过来,若设成"beta",又可能推一个你不想要的预发布版 -
"platform"限制:比如你锁死 PHP 8.1,而新包要求"php": "^8.2",那它压根不会进outdated列表
想看两个版本间具体改了什么?得靠 Git 或 GitHub API
如果你已用 "prefer-source": true 安装过该包,本地 vendor/ 下就是个完整 Git 仓库,这时可以用 git 直接比对:
git -C vendor/monolog/monolog log --oneline v2.8.0..v2.9.0
git -C vendor/monolog/monolog diff --stat v2.8.0..v2.9.0
但注意:这要求你知道确切的两个 tag 名,且该包确实打了规范 tag(很多小包不打,或只打 dev 分支)。更通用的做法是调 GitHub Compare API:GET /repos/{owner}/{repo}/compare/v2.8.0...v2.9.0,配合 composer show 拿到的 source 地址解析 owner/repo。
- 没开
prefer-source?那就没法本地git log,只能靠线上页面或 API - 某些包用私有分支或删旧 tag,GitHub 页面可能比 Packagist 元数据更准
-
composer update --dry-run vendor/package只模拟升级路径,不输出变更内容
别信“最后更新时间”,它根本不是你本地更新的时间
composer show 或 composer outdated 里看到的 time 字段,是该版本在 Packagist 上的发布时间,不是你机器上 composer update 的时间。
想确认某包在你本地到底什么时候更新的,唯一靠谱方式是查文件系统:
stat -c "%y %n" vendor/monolog/monolog(Linux)
Get-ChildItem vendor\monolog\monolog | ForEach-Object { $_.LastWriteTime }(PowerShell)
- Composer 不记录、不存储、也不暴露“本地安装时间”
-
composer.lock里只有time字段(即 packagist 发布时间),没有installed_at或类似字段 - ~/.composer/logs/composer.log 记录的是命令执行过程,不是每个包的安装时刻,且默认只保留最近几次操作
composer show --latest 或 outdated 能替代人工核查——它们只是起点,不是终点。真要升级前确认影响,必须打开 GitHub 页面,点开那个 release,逐行看 “What’s Changed”。










