composer cache-dir 是定位缓存位置的唯一命令,它直接输出全局缓存根目录路径,再用 du -sh(Linux/macOS)或 PowerShell 命令查看占用;最安全快速的清理方式是运行 composer clear-cache,并手动删除 archived/ 目录及 files/ 中年久子目录。

composer install 报错 disk space exhausted 怎么快速定位缓存位置
Composer 默认把下载的包、zip 解压产物、安装时的临时文件全堆在全局缓存里,时间一长可能占几十 GB。报磁盘空间不足时,composer cache-dir 是唯一该先查的命令——它直接告诉你缓存根目录在哪,别猜 ~/.composer/cache 或 %APPDATA%\Composer\Cache,不同系统/版本路径可能偏移。
- 运行
composer cache-dir,复制输出路径(比如/home/user/.cache/composer) - 用
du -sh <路径>(Linux/macOS)或Get-ChildItem -Recurse | Measure-Object -Property Length -Sum(PowerShell)看真实占用 - 注意:缓存目录下
files/存的是已下载 zip 包,repo/是 packagist 元数据,archived/是旧版压缩包备份——三者都可能膨胀
删哪些缓存文件最安全又见效快
别一股脑 rm -rf 整个缓存目录,Composer 会重建但下次 install 又得重下所有包。真正该清的是过期和冗余项:
-
composer clear-cache是首选,它只删files/和repo/下已失效的条目,保留最近成功安装过的包缓存 - 手动删
archived/目录(如果存在):这是 Composer v1 升级 v2 后遗留的“历史压缩包”,v2 不再使用,纯占空间 - 检查
files/下有没有年份久远(如2021-开头)的子目录,可按需find files/ -name "2021-*" -type d -delete
为什么 composer update 比 install 更容易触发磁盘爆满
update 会同时拉取多个包的新版本 zip、解压比对、生成新锁文件,临时 IO 峰值远高于 install。尤其当 composer.json 里用了宽泛版本约束(如 "^2.0"),Composer 可能下载十几二十个候选包再筛选,每个 zip 少则几 MB、多则上百 MB。
- 执行前先跑
composer show --outdated,确认哪些包真要升,避免盲目update - 加
--with-dependencies时更危险,它会递归拉取依赖树所有分支的候选包 - 若只是想更新单个包,用
composer update vendor/package-name,不带--with-dependencies,能大幅减少临时缓存体积
长期省空间:关掉不需要的缓存类型
Composer v2 默认开启所有缓存,但有些场景完全用不上。比如 CI 环境每次都是全新容器,repo 缓存意义不大;或者你从不用 archive 功能,就该关掉。
- 禁用元数据缓存(适合 CI):
composer config --global cache.repos false - 彻底禁用 zip 包缓存(慎用,会增加网络请求):
composer config --global cache.files false - 查看当前配置:
composer config --global --list | grep cache
缓存开关不是万能的,关太多会导致重复下载、拖慢构建。关键是清楚自己要不要「下次装得快一点」,还是「这次必须腾出 5GB」——前者调参数,后者直接清 archived/ 最立竿见影。










