cache-ttl 是 composer 控制远程包元数据(packages.json)缓存有效期的配置项,单位秒;改它无效是因为未清除旧元数据缓存或混淆了其与 cache-files-ttl 的作用。

cache-ttl 是什么,为什么改它没用
cache-ttl 是 Composer 用来控制「远程包元数据缓存」有效期的配置项,单位是秒。它不控制本地下载的 ZIP 或 TAR 包文件缓存(那些走的是 cache-files-ttl),也不影响 vendor/ 目录内容。很多人调低 cache-ttl 却发现 composer update 还是不拉新版本,就是因为混淆了「元数据缓存」和「实际代码缓存」——Composer 先查 packagist.org 的 packages.json 缓存,再决定要不要下载新 ZIP,cache-ttl 只管前者。
- 默认值是
600(10 分钟),线上环境建议保留或调高,避免频繁请求 Packagist - 开发中想立刻看到新 tag 生效?光调
cache-ttl不够,还得清元数据缓存:composer clear-cache或删$COMPOSER_HOME/cache/repo/https---packagist.org/ - 该配置对私有仓库同样生效,但前提是仓库响应头里没带更强的
Cache-Control
怎么设置 cache-ttl:全局、项目、临时三种方式
设置位置不同,优先级也不同:命令行参数 > 项目 composer.json > 全局 config。别在项目根目录瞎建 config.json,Composer 不认。
- 全局设置(影响所有项目):
composer config -g cache-ttl 300 - 仅当前项目生效:
composer config cache-ttl 300(会写入项目composer.json的config段) - 单次命令覆盖:
composer update --config-cache-ttl=60(注意是双横线 + 下划线,不是短横) - 手动编辑配置文件时,确保格式正确:
{"config": {"cache-ttl": 300}}
cache-ttl 和 cache-files-ttl 容易搞混的点
两者名字像,作用完全不同。cache-files-ttl 控制的是已下载的 ZIP/TAR 包在本地缓存里的“保质期”,单位也是秒。如果你发版后 composer install 仍装旧代码,大概率是它在作祟。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
cache-ttl:决定「是否重新请求 packages.json」,影响版本列表更新 -
cache-files-ttl:决定「是否复用本地 ZIP 包」,影响实际安装的代码是不是最新 - 私有 Git 仓库依赖?这两个都不管——Git clone 结果由
cache-vcs-ttl控制,默认 15 分钟 - 设太小(比如
1)会导致每次命令都重请求元数据,Packagist 会返回 429,本地也会变慢
验证配置是否生效的可靠方法
别只看 composer config --list 输出,那个只是显示当前配置值,不反映真实行为。真正要看的是 Composer 请求时的日志。
- 加
-v参数触发详细输出:composer update -v 2>&1 | grep "Fetching",观察是否频繁出现Fetching https://repo.packagist.org/packages.json - 检查缓存目录修改时间:
ls -la $COMPOSER_HOME/cache/repo/https---packagist.org/,重点看packages.json文件的mtime - 改完配置后第一次
update不代表立即生效——旧缓存还在,得等它自然过期,或手动clear-cache
最常被忽略的是:改了 cache-ttl 后没清旧缓存,或者误以为它能强制刷新 vendor 里的代码。它只管“知道有新版本”这一步,后面下不下、装不装,是另一套逻辑。










