Composer临时文件默认存于系统TMPDIR/TEMP路径,无内置大小限制且不自动清理;常见爆满原因包括git clone大仓库、CI环境/tmp空间小及反复update缓存累积。

Composer 临时文件在哪?默认不设限
Composer 下载和解压包时,会把中间产物(如 .zip/.tar.gz 缓存、git clone 临时目录、unpack 时的 tmp 文件)放在系统临时目录下,路径由 TMPDIR(Linux/macOS)或 TEMP/TMP(Windows)环境变量决定。它本身**没有内置配置项来限制单个临时文件大小或总缓存体积**,也不会主动清理旧临时文件——这些都交给系统或用户管。
为什么临时目录爆满?常见诱因
临时空间不足常被误判为内存错误,实际表现是命令卡死、报 Killed 或静默退出,dmesg 可能显示 Out of memory: Kill process xxx (php),但根源是磁盘写满触发内核 OOM killer。
- Composer 默认把 dist 包缓存到
~/.composer/cache/files/,大项目反复 update 后可达数 GB - git clone 过程中会在
$TMPDIR下建临时仓库,某些包(如 laravel/framework).git 目录超 500MB - 使用
--prefer-source时,每个包都会完整 clone,临时目录压力翻倍 - CI 环境(如 GitHub Actions)默认
/tmp只有几百 MB,且不自动清理
怎么控制临时空间占用?实操三招
没“限制大小”的开关,但可通过路径重定向 + 主动清理 + 安装策略组合控量:
- 用
TMPDIR指向有配额的目录:比如export TMPDIR="/path/to/large/tmp"(Linux/macOS),或set TMPDIR=D:\bigtmp(Windows CMD)。确保该路径所在分区剩余空间 ≥2GB - 强制走 dist 而非 source:
composer install --prefer-dist --no-dev。dist 包是预编译压缩包,解压临时文件比 git clone 小 60%~80% - 定期清缓存:
composer clear-cache。它会删掉~/.composer/cache/下所有内容(包括 files/ 和 repo/),释放空间最直接
CI/CD 中必须注意的坑
GitHub Actions、GitLab CI 默认不保留 TMPDIR,且容器重启后 /tmp 清空,看似安全,但并发 job 可能挤占同一 /tmp 导致失败。
- GitHub Actions:在
run:步骤开头加export TMPDIR=$(mktemp -d),用完自动销毁 - GitLab CI:在
before_script:里写export TMPDIR="${CI_PROJECT_DIR}/.tmp",并确保.tmp加入.gitignore - 别依赖
composer config cache-max-size:它只管~/.composer/cache/files/的总大小,不管$TMPDIR下的瞬时临时文件
TMPDIR 路径的磁盘使用率,比等报错再救更有效。


















