composer如何查看变更日志_composer status命令详解【追踪】

6次阅读

composer status 仅校验本地 vendor/ 文件与 composer.lock 的哈希一致性,用于检测是否被手动修改;它不显示变更日志、不查远程更新、不依赖网络,输出如“monolog/monolog has uncommitted changes”。

composer如何查看变更日志_composer status命令详解【追踪】

composer status 命令不显示变更日志,它只检查本地 vendor/ 文件是否与 composer.lock 一致——换句话说,它回答的是“有没有被手动改过”,而不是“这个包更新了什么”。


composer status 是干啥的?

composer status 的唯一职责是比对已安装包的文件哈希(来自 composer.lock)和当前 vendor/ 目录下实际文件的哈希。一旦发现不一致,就列出那些“被改动过”的包路径,并提示你可能执行了 git checkoutrm -rf 或手改源码等操作。

  • 它不查远程新版本,不读 CHANGELOG.md,也不调 github API
  • 它不依赖网络,纯本地校验,所以快但信息极有限
  • 输出类似:monolog/monolog has uncommitted changes in vendor/monolog/monolog

想看包的变更日志,该用什么?

Composer 本身没有内置命令能拉取或解析变更日志——这是设计使然,不是功能缺失。所有靠谱做法都绕不开外部来源:

  • 先用 composer show monolog/monologsource 类型和仓库地址(比如 https://github.com/Seldaek/monolog
  • sourcegit(即装包时用了 --prefer-source),可直接进目录查:git -C vendor/monolog/monolog log --oneline v2.8.0..v2.9.0
  • 更通用:访问 GitHub Releases 页面,或找项目根目录下的 CHANGELOG.md(多数主流包都维护)
  • 自动化?得自己写脚本调 GitHub Compare API:/repos/{owner}/{repo}/compare/v2.8.0...v2.9.0,但需处理认证、限流、404

为什么不能信 composer outdated 的“最新版”?

composer outdated 显示的“最新稳定版”只是 Packagist 缓存里的元数据快照,不含发布时间、破坏性变更标记、安全通告等关键上下文:

  • 它默认忽略 dev-betarc 版本,但有些项目把重要修复发在 dev-main
  • 它不告诉你 v3.0.0 是否含 BC break,也不标哪个 commit 修了 CVE-2025-1234
  • --direct 只过滤 root require,但嵌套依赖的变更照样可能崩掉你的代码
  • 运行 composer outdated --format=json | jq '.[] | select(.latest != .version) 后,仍得人工点开每个包的 Releases 页面核对

日志文件位置别搞混:composer.log 不是变更日志

很多人搜“composer 日志”就直奔 ~/.composer/logs/composer.log,但这个文件只记录 Composer 自身的命令执行过程(比如下载失败、权限错误、插件加载异常),和“某个包发布了什么新功能”完全无关。

  • 它不会出现 monolog added PsrLogAwareTrait in v2.9.0 这类内容
  • debian/centos 下路径虽统一为 ~/.composer/logs/composer.log,但默认可能根本不存在——只有出错且启用了日志配置才会生成
  • 真要留痕,最可靠的是重定向:composer update -vvv > update-debug.log 2>&1

真正需要知道的只有一条:变更日志不在 Composer 里,而在包作者写的文档、提交记录、发布页里。工具只是帮你定位到那里,没法替你读。

text=ZqhQzanResources