Composer 不提供下载临时文件的独立命令,其临时文件实为 install/update 过程中在系统临时目录(如 /tmp 或 %APPDATA%\Local\Temp)生成的 composer_*.zip 等未解压中间文件,中断时残留需手动清理。

Composer 本身不提供“下载临时文件”的独立命令或功能——它所有下载行为都服务于依赖安装,临时文件只是中间产物,不是设计目标。你真正想做的,通常是让 Composer 在 install/update 过程中生成可被后续脚本清理的临时产物,或者排查它卡在下载环节时留下的残留文件。
composer install/update 卡住时,临时文件在哪
Composer 执行过程中产生的真正“临时文件”不在 vendor/ 或缓存目录,而是在系统临时目录:
- Linux/macOS:
sys_get_temp_dir()返回路径(通常是/tmp),里面会出现composer_*.zip、composer_*.tar等未解压完的包文件 - Windows:
%APPDATA%\Local\Temp,文件名类似composer_5f3a2b1c.zip - 这些文件是 Composer 下载后、解压前的中间状态;如果命令中断(如网络断开、Ctrl+C、超时),它们不会自动清理
- 检查 inode 是否耗尽:
df -i,大量composer_*.zip可能导致构建失败,但composer clear-cache不会动它们
如何让 Composer 下载过程更可控(避免卡死)
所谓“下载临时文件”,本质是控制 Composer 的网络行为和中间状态。关键配置项只有两个:
-
process-timeout:决定单个下载/克隆操作最多等多久,默认 300 秒。设为 1800(30 分钟)可缓解大包中断:composer config --global process-timeout 1800 -
--no-cache:跳过~/.composer/cache/files/中已有的 zip 包,强制走网络——但它不删除 vendor/ 下已有文件,所以不是“重下全部”,只是“不复用缓存” - 禁用 TLS 验证(仅调试):
composer config -g disable-tls true,但必须在修复后立刻关掉,否则有中间人风险 - 别碰
openssl.cafile或curl.cainfo:90% 的证书报错其实是镜像源 + 缓存问题,不是 CA 路径错了
想手动触发一次“干净下载”,该删什么
要确保每个包都从远程真实拉取、校验哈希、重新解压,必须同时切断三个来源:
- 删缓存:
composer clear-cache(清空~/.composer/cache/files/) - 删锁文件:
rm composer.lock(否则install仍是按 lock 复原,不是重算依赖树) - 删已安装产物:
rm -rf vendor/(--force-reinstall会删子目录但保留 vendor/ 结构,不够彻底) - 最后执行:
composer install --no-cache,此时 Composer 才会真正全部走网络下载
真正容易被忽略的是:Composer 的“临时文件”从来不是供你主动下载或使用的对象,而是它自己流程中的副产品。盯住 /tmp 或 %APPDATA%\Local\Temp 里的 composer_*.zip,比纠结“怎么下载临时文件”更能解决实际卡顿和磁盘爆满问题。


















