执行 composer update -v 时,若输出“reading .../packages.json from cache”则元数据命中缓存,若输出“downloading https://.../packages.json”则未命中;该缓存硬编码15分钟,仅可通过 --refresh 或手动删除 repo/ 目录刷新。

composer update 时怎么看元数据有没有走缓存
Composer 对元数据(packages.json 和 provider-*.json)的缓存是硬编码的 15 分钟,不依赖配置、不响应 clear-cache,只看本地文件时间戳。所以“是否命中”根本不是逻辑判断,而是文件是否存在且未过期。
执行 composer update -v(加 -v 或 -vvv),观察输出里关键两行:
- 若看到
Reading /path/to/cache/repo/https---mirrors-aliyun-com-composer/packages.json from cache→ 元数据命中缓存 - 若看到
Downloading https://mirrors.aliyun.com/composer/packages.json→ 强制重拉,缓存未命中(或已过期)
注意:这个“缓存”只指 repo 目录下的 JSON 文件,和 ZIP 包缓存无关;composer clear-cache 不会影响它,但 composer update --refresh 会删掉这些文件强制刷新。
为什么明明删了缓存,update 还在读旧元数据
因为 composer clear-cache 默认只清 files/(ZIP 包)和部分临时 JSON,但 repo/ 下的 packages.json 和 provider-*.json 仍保留——它们受 15 分钟硬编码保护,只要没超时,Composer 就绝不重发 HTTP 请求。
常见误操作:
- 改完镜像后只跑
composer clear-cache,没等满 15 分钟或没手动删repo/子目录 → 依然用旧索引 - 误以为
--no-cache能绕过元数据缓存 → 它只禁用 ZIP 包缓存,对元数据无效 - 执行
composer config --global repo.packagist ...后没验证composer diag输出的 Cache directory 路径 → 配置可能根本没生效
真正有效的刷新方式只有两个:composer update --refresh(≥2.5),或手动 rm -rf $(composer config --global cache-dir)/repo/https---mirrors-aliyun-com-composer。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
如何确认 ZIP 包缓存是否被复用
ZIP 包缓存是否命中,体现在下载阶段日志里:
- 出现
Downloading https://codeload.github.com/...→ 没命中,重新下载 - 出现
Using version X.Y.Z for vendor/package+Installing vendor/package (X.Y.Z)中间没有 Downloading 行 → 命中缓存,直接解压安装
前提是:
- 你用了
--prefer-dist(默认开启) -
cache-files-ttl未过期(默认 6 个月) - 包确实曾被下载过,且缓存路径下存在对应 ZIP 文件,例如:
$(composer config --global cache-dir)/files/vendor/package/X.Y.Z.zip
注意:镜像源只代理元数据,不托管 ZIP 包。即使配了阿里云镜像,Downloading 行仍可能指向 GitHub —— 这不表示镜像失效,只说明 ZIP 下载路径没变。
容易被忽略的缓存分层陷阱
Composer 缓存不是“一个开关”,而是三层独立机制:
-
repo/:元数据缓存,硬编码 15 分钟,不可调,--refresh是唯一轻量刷新手段 -
files/:ZIP 包缓存,受cache-files-ttl和cache-files-maxsize控制,clear-cache主要清这里 -
vcs/:Git clone 缓存,仅用于--prefer-source场景,和大多数人的日常无关
很多人卡在“配了镜像却装不到新包”,其实只是把三者混为一谈:改了 repo.packagist,却没意识到元数据缓存还在用 15 分钟前的老快照;或者清了 files/,却对 repo/ 束手无策。最稳妥的做法永远是:先 composer update --refresh,再 composer install --prefer-dist,别省这一步。










