composer怎么查看自更新日期_composer检查最后更新时间

1次阅读

composer show –outdated 显示的日期是包在 packagist 上的发布时间,而非本地更新时间;查本地更新时间应检查 vendor/ 目录下对应包的文件修改时间,或用脚本批量获取目录最后变更日期。

composer怎么查看自更新日期_composer检查最后更新时间

composer show –outdated 显示的日期是包的发布日期,不是本地更新时间

Composer 本身不记录每个包在你本地最后一次 composer update 的时间。你看到的 composer show --outdatedcomposer show vendor/package 里显示的 time 字段,其实是该版本在 Packagist 上的发布时间,不是你机器上安装或更新的时间。

所以别指望靠这个判断“我上周有没有更新过 laravel/framework”——它回答不了这个问题。

查本地更新时间得看 vendor 目录的文件修改时间

最直接、最可靠的方式是检查 vendor/ 下对应包目录的最后修改时间。Composer 安装或更新时会写入文件,这个时间戳基本能反映你上次操作的时间(除非手动改过文件)。

  • ls -ld vendor/laravel/frameworklinux/macos
  • dir vendorlaravelframeworkwindows cmd)
  • 如果用 git 管理 vendor/(不推荐),可用 git log -n 1 -- vendor/laravel/framework 查提交时间

注意:vendor/ 下的文件时间可能被某些 ide、杀毒软件或同步工具意外刷新,导致不准;但对绝大多数日常场景,它比任何元数据都实在。

自动化查多个包的更新时间?写个简单脚本就行

Composer 没提供内置命令,但你可以用一行 shell 快速扫一遍常用包:

find vendor -maxdepth 2 -type d -name 'composer.json' -exec dirname {} ; | xargs -I{} sh -c 'echo "$(basename {}): $(stat -c "%y" {} 2>/dev/null | cut -d" " -f1)";' | sort

说明:

  • 只查 vendor/ 下二级目录(避免扫描太深),找含 composer.json 的包根目录
  • stat -c "%y" 是 Linux 语法;macOS 要换成 stat -f "%Sm" -t "%Y-%m-%d" {}
  • 输出格式为 package-name: 2024-05-22,按日期排序便于发现哪些包很久没动过

这个脚本不会误判,也不依赖 Packagist 数据,但它查的是“目录最后变更时间”,不是“Composer 记录的更新动作时间”——这两者在绝大多数 update 场景下是一致的。

别信 composer.lock 里的 time 字段

composer.lock 文件里每个包确实有个 time 字段,比如:

"time": "2024-05-20T14:22:33+00:00"

但这只是 Composer 写 lock 文件时,从 Packagist API 拉下来的版本发布时间,和你的本地操作毫无关系。即使你一年没跑 update,只要重生成 lock(比如改了 composer.jsoninstall),这个时间也会被覆盖成最新版的发布日期。

所以拿它当更新时间用,等于把出厂日期当保养日期——看起来有依据,其实完全错位。

真正要确认某个包是不是最近更新的,盯住 vendor/ 目录的时间戳,再配合 git status vendor/(如果你真提交了 vendor)——其他所有间接方式,都容易漏掉关键上下文。

text=ZqhQzanResources