Composer中文镜像默认缓存包元数据,cache-ttl默认值为600秒(10分钟),非30天;可通过composer config -g cache-ttl修改全局阈值,单位秒,设0强制每次刷新,但需配合composer clear-cache生效,且镜像同步延迟时调低该值无效。

Composer中文镜像默认不缓存包元数据?
不是。Composer 2.x 在使用镜像(如 https://packagist.phpcomposer.com 或当前主流的 https://packagist.proxy.bilibili.co)时,仍会本地缓存 packages.json 等元数据,默认有效期为 30 天(cache-ttl),与是否中文镜像无关——镜像只是远程源的代理,缓存行为由 Composer 本地控制。
如何修改 cache-ttl 阈值?
通过全局或项目级配置调整 cache-ttl 值(单位:秒),它控制 Composer 读取远程 packages.json 前,是否认为本地缓存已过期:
- 设为
0:每次运行composer update或composer require都强制刷新元数据(最“新鲜”,但慢且增加镜像压力) - 设为
3600(1 小时):适合频繁发版的私有包场景 - 设为
86400(24 小时):平衡新鲜度与稳定性,中文镜像通常能较好支撑此频率 - 注意:
cache-ttl不影响composer install(它只读composer.lock,不查元数据)
执行命令修改(以全局为例):
composer config -g cache-ttl 3600
查看当前值:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer config -g cache-ttl
为什么改了 cache-ttl 还看不到新包?
常见原因不是阈值问题,而是缓存未清理或镜像同步延迟:
- 手动清空元数据缓存:
composer clear-cache(它会删掉packages.json缓存,下次运行自动重新拉取) - 确认镜像本身是否已同步目标包:访问镜像的
/packages/list.json(如https://packagist.proxy.bilibili.co/packages/list.json)直接查包名,若返回中无该包,说明镜像尚未抓取,调低cache-ttl也无效 -
composer show vendor/name报Package not found,可能是包未在镜像packages.json中注册,而非本地缓存旧——此时需等镜像同步,或临时切回官方源验证:composer config -g repo.packagist composer https://packagist.org
自定义镜像 + 自建元数据缓存服务时要注意什么?
如果你用 satis 或 toran proxy 搭建私有镜像,并希望控制其元数据刷新节奏,cache-ttl 依然只作用于客户端(开发机);服务端需单独配置:
-
satis:靠build命令触发重建,无自动 TTL,需配合定时任务 -
toran proxy:在 Web UI 的 “Repositories” → 编辑源 → 设置 “Update frequency”(支持分钟级) - 无论哪种,Composer 客户端的
cache-ttl和服务端更新周期是两层独立逻辑,必须同时对齐,否则会出现“服务端已更新,客户端因缓存未过期仍读旧数据”的情况
真正容易被忽略的是:镜像 URL 本身被写死在 composer.json 的 repositories 字段里时,composer config -g repo.packagist 的设置会被覆盖——此时必须改项目配置或删掉自定义 repositories 条目。

















