cache-files-ttl决定安装时解压哪个zip包,而非cache-ttl;它控制~/.composer/cache/files/下.zip/.tar文件的保质期,未过期则直接复用,不校验远程更新。

cache-files-ttl 才决定你装到哪个 ZIP 包
发版后 composer install 还是解压旧代码?不是 cache-ttl 没生效,而是它根本不管 ZIP 文件。真正起作用的是 cache-files-ttl:它控制本地 ~/.composer/cache/files/ 下那些 .zip、.tar 包的“保质期”。只要缓存没过期,Composer 就直接解压复用,完全不看远程有没有新包。
- 全局设为 24 小时:
composer config -g cache-files-ttl 86400 - 项目级(写入
composer.json):{"config": {"cache-files-ttl": 3600}} - 单次命令覆盖:
COMPOSER_CACHE_FILES_TTL=600 composer install(注意是环境变量,不是--cache-files-ttl) - 设太小(如
1)会导致每次重下 ZIP,Packagist 很快返回429 Too Many Requests,卡在Loading from cache - 设太大(如 30 天)会让 CI 持续装错包好几天,尤其高频发版场景
cache-ttl 只管 packages.json 元数据要不要刷新
你改了 cache-ttl 却发现 composer show 里没出现新包?那是对的——它只影响 Composer 是否重新请求 https://packagist.org/packages.json(或镜像源),默认 600 秒(10 分钟)。这个文件只是版本列表索引,不是代码本身。
- 开发中想立刻看到新 tag,光调
cache-ttl不够,还得清元数据缓存:composer clear-cache或手动删$COMPOSER_HOME/cache/repo/https---mirrors.aliyun.com-composer/ - 全局设置:
composer config -g cache-ttl 300 - 临时覆盖:
composer update --config-cache-ttl=60(双横线 + 下划线) - 私有仓库也受它影响,但若对方响应头带
Cache-Control: max-age=3600,会优先服从服务端指令
私有 Git 依赖走的是 cache-vcs-ttl,和前两者无关
用 "git@xxx:vendor/pkg.git" 这种方式声明的依赖,cache-ttl 和 cache-files-ttl 都不生效。Composer 会完整 clone 一份 Git 仓库到 ~/.composer/cache/vcs/,并由 cache-vcs-ttl 控制是否复用这个克隆副本,默认 900 秒(15 分钟)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- push 新 commit 后
composer update仍 checkout 旧版本?检查cache-vcs-ttl:composer config --list | grep cache-vcs-ttl - 设为 5 分钟:
composer config cache-vcs-ttl 300(项目级) - 改完不会自动删旧克隆,只影响下次是否复用;要立刻生效,得手动删对应目录或运行
composer clear-cache - VCS 缓存目录不可挂载为只读,否则 clone 失败
验证配置是否真起作用,别信 composer config --list
composer config --list 只显示当前配置值,不反映实际行为。真正起作用的是 Composer 请求时的日志输出。加 -v 看关键行:
- 出现
Downloading https://packagist.org/packages.json→cache-ttl已过期 - 出现
Downloading vendor/package/version.zip→cache-files-ttl已过期 - 出现
Cloning git@xxx...或Updating git@xxx...→cache-vcs-ttl已过期 - 用
composer update -v 2>&1 | grep -E "(Downloading|Cloning|Updating)"快速定位
三类 TTL 完全独立,改错地方等于没改。最常被忽略的是:VCS 依赖不走 dist 缓存,哪怕你把 cache-files-ttl 设成 0,它照样 clone。










