根本原因是composer默认复用本地缓存的packages.json元数据(默认300秒内不过期),不主动校验镜像站更新;解决需用composer update --refresh(≥2.5)强制刷新元数据,或手动删除对应镜像缓存子目录。

Composer 镜像站的元数据缓存不是“自动刷新”或“永久有效”的,它由本地 composer.lock 与远程镜像元数据(packages.json、provider-*.json 等)共同决定;不手动干预时,Composer 默认会缓存这些文件长达 5 分钟(cache-ttl),但实际是否命中取决于请求路径、hash 变更和本地缓存有效性。
为什么 composer update 有时不拉新包版本?
根本原因不是镜像同步延迟,而是 Composer 复用本地已缓存的元数据 —— 即使镜像站上已有新版 provider-laravel.json,只要本地缓存未过期且 hash 匹配,就不会重新下载。
-
composer update默认只检查cache-ttl(默认 300 秒),而非强制重载元数据 - 镜像站返回的
packages.json中包含各 vendor 的 provider 文件 hash,Composer 用它校验本地缓存是否一致 - 若你刚切换镜像源(如从 packagist.org 切到阿里云镜像),旧缓存可能残留并干扰解析
如何强制刷新 Composer 镜像元数据缓存?
最可靠的方式不是清空整个 cache 目录,而是精准触发元数据重载 —— 尤其适用于 CI/CD 或多人协作中因缓存导致依赖解析不一致的场景。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer clear-cache:清掉所有缓存(包括已下载的 zip 包),下次update必然重拉元数据 - 加
--ignore-platform-reqs不影响元数据刷新,但加-v可看到实际加载了哪些provider-*.json - 临时绕过缓存:设置环境变量
COMPOSER_CACHE_DIR=/dev/null(仅调试用,不推荐长期使用) - 更轻量做法:删掉
$COMPOSER_HOME/cache/repo/https---mirrors.aliyun.com-composer/下的packages.json和provider-*.json文件,保留dist/目录
config cache-ttl 和 config cache-files-ttl 的区别
这两个配置常被混淆,但作用对象完全不同:
-
cache-ttl控制的是元数据(packages.json、provider-*.json)缓存有效期,单位秒,默认300 -
cache-files-ttl控制的是已下载的 dist 包(zip/tar.gz)缓存有效期,默认15552000(180 天),跟元数据刷新无关 - 修改前者:运行
composer config --global cache-ttl 60(设为 1 分钟,适合开发机频繁切分支) - 修改后者:一般无需调整,除非磁盘空间紧张且确认 dist 包不会重复使用
真正容易被忽略的点是:Composer 的元数据缓存是“按镜像 URL 隔离”的。同一包在 packagist.org 和阿里云镜像上的 provider-laravel.json 路径不同,缓存也互不干扰 —— 所以切镜像后旧缓存不会自动失效,必须手动清理或等 TTL 到期。










