能,但仅限Composer 2.5+版本;它在每次写入前检查总大小,超限时自动清理最旧文件,且vcs/目录不计入统计,需单独禁用cache-vcs。

cache-max-size 配置能真正限制缓存体积吗
能,但仅限 Composer 2.5+ 版本。低于此版本设置无效,cache-max-size 不是兼容性开关,而是底层缓存管理器的硬性阈值控制逻辑——它在每次写入新文件前检查总大小,超限时自动触发垃圾回收(GC),删最旧文件而非报错。
怎么设置 cache-max-size 参数
直接运行全局配置命令即可生效,无需重启或重装:
-
composer config --global cache-max-size "500M"—— 推荐起始值,兼顾空间与复用率 -
composer config --global cache-max-size "1G"—— 多项目/私有包频繁更新时可用 -
composer config --global cache-max-size "0"—— 禁用自动清理(不推荐,等同于放任增长)
单位支持 K、M、G、T,注意必须带引号,否则 shell 可能截断。
为什么设了 cache-max-size 还会爆磁盘
常见原因有三个:
-
vcs/目录默认不计入统计:Git 克隆缓存(~/.composer/cache/vcs/)被排除在cache-max-size计量之外,单个裸仓库就可能占 800 MB - 临时解压目录未被监控:
archives/或sys_get_temp_dir()下的composer_*.zip文件不受该参数约束 - 缓存路径被环境变量覆盖:若设置了
COMPOSER_CACHE_DIR,但没在对应路径下执行config --global,配置实际写到了错误位置
配合 cache-files-ttl 使用更稳
单靠 cache-max-size 容易在高频更新场景下反复触发 GC,建议同步收紧过期策略:
-
composer config --global cache-files-ttl 604800—— 设为 7 天,避免长期积压冷包 -
composer config --global cache-read-only false—— 确保 GC 能写入清理标记(只读模式下 GC 被跳过)
这两个参数共同作用时,Composer 才会在「体积超限」和「时间过期」任一条件满足时主动清理,而不是等到磁盘报警才动手。
真正容易被忽略的是:vcs/ 目录既不参与 cache-max-size 统计,也不响应 cache-files-ttl,它只听 cache-vcs 开关。如果不需要 Git 源码克隆,最彻底的方式是 composer config --global cache-vcs false。


















