根本原因是 Composer 全局缓存目录(如 ~/.composer/cache/)长期未清理,堆积大量 dist/source 文件导致磁盘或 inode 耗尽;可用 composer clear-cache 清理、--no-dev 减体积、禁用 source/dist 缓存防复发。

为什么 composer install 或 composer update 会报 “Disk full”?
根本原因不是项目目录满了,而是 Composer 默认把所有包缓存到全局 ~/.composer/cache/(Linux/macOS)或 %APPDATA%\Composer\Cache\(Windows),长期不用清理,缓存体积可达数 GB。尤其当你频繁切换版本、使用 composer create-project 或启用了 archive 缓存时,dist 和 source 子目录会堆积大量压缩包和 Git 克隆副本。
立刻释放空间的三个有效命令
别急着手动删文件夹——Composer 提供了安全、幂等的内置清理方式:
-
composer clear-cache:清空整个缓存目录(dist、source、repo、files),最常用也最彻底 -
composer dump-autoload --optimize:不直接删磁盘,但能减小vendor/autoload.php体积并加速加载,间接缓解某些低配环境压力 -
composer install --no-dev(上线环境):跳过require-dev中的包(如 PHPUnit、PHPStan),可减少 vendor 目录 30%~60% 空间
如何防止缓存再次爆炸?
Composer 本身不自动轮转或限制缓存大小,需主动配置:
- 禁用 source 缓存(省下最多空间):
composer config --global cache.source false
- 禁用 dist 缓存(慎用,会增加下载次数):
composer config --global cache.dist false
- 定期清理旧版本缓存(需脚本辅助):缓存中每个包按
vendor/name+version存储,无法用 Composer 命令按时间删,建议用 shell 定期清理 90 天前的子目录,例如:find ~/.composer/cache/files -type d -mtime +90 -delete
遇到 disk quota exceeded 却 df -h 显示充足?
这通常是 inodes 耗尽(尤其在大量小文件场景下),Composer 缓存正是典型元数据杀手。检查命令:
df -i。若
Use% 接近 100%,即使磁盘还有空间也会失败。此时必须删文件(composer clear-cache 有效),或调整系统 inode 配置——后者一般无权限,优先走清理。










