composer clear-cache 清不掉真正占空间的缓存是因为它默认跳过 vcs/ 目录,而该目录存储完整 Git 裸仓库(每个300–800MB、含上万小文件),导致磁盘和 inode 耗尽;需手动删除 vcs/ 并禁用 cache.vcs、清理 files/ 陈旧 ZIP 及系统临时目录中的 composer_*.zip 才能彻底释放空间。

composer clear-cache 为什么清不掉真正占空间的缓存
因为 composer clear-cache 默认只清 files/、repo/ 和 installers/,但真正吃磁盘和 inodes 的 vcs/ 目录被完全跳过——它存的是完整 Git 裸仓库(每个 300–800 MB,含上万小文件),而 df -i 显示 inode Use% 接近 100% 时,基本就是它在作祟。
-
clear-cache不动vcs/,哪怕你刚执行完,No space left on device还可能继续报 - 手动删前先确认没进程占用:
lsof +D $(composer config --global cache-dir)(Linux/macOS)或关掉 PhpStorm/杀毒软件 - 安全删除命令:
rm -rf ~/.composer/cache/vcs/*(Linux/macOS)或rd /s /q "%APPDATA%\Composer\Cache\vcs"(Windows)
如何永久避免 vcs/ 缓存再生长
禁用 Git 克隆缓存是最直接的办法:让所有包强制走 --prefer-dist,彻底绕过 vcs/ 目录生成。这不是“妥协”,而是生产环境更稳定的选择。
- 执行:
composer config --global cache.vcs false - 效果:后续
composer update会重下 dist 包(首次略慢),但不再创建任何.git目录 - 验证是否生效:运行
composer install -v,观察输出中是否出现Cloning into—— 如果没有,说明已走 dist - 注意:某些包若未发布 dist(只有 source),会 fallback 到 clone,但主流中文镜像源(阿里云、腾讯云)已对绝大多数包补全 dist
精准清理 files/ 里陈旧 ZIP 包,而不是全删
files/ 存的是所有下载过的 .zip 和 .tar.gz 归档,一个 Laravel UI 组件就可能超 80 MB;但直接 rm -rf files/ 会导致多项目重复下载——得按需删。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 先定位路径:
composer config --global cache-dir,再进files/子目录 - 查当前项目依赖版本:
grep -A 1 '"monolog/monolog"' composer.lock,记下"version": "2.13.0" - 在
files/中找对应 hash 目录(如monolog/monolog/2.13.0/9a8b7c6d.zip),只保留 lock 文件里出现的版本 - 批量删 90 天前未被任何项目引用的包:
find ~/.composer/cache/files -name "*.zip" -mtime +90 -delete 2>/dev/null
别忽略系统临时目录里的 composer_*.zip
Composer 解压包、生成 autoload、执行脚本时大量使用 sys_get_temp_dir() 返回的路径(Linux/macOS 是 /tmp,Windows 是 C:\Users\XXX\AppData\Local\Temp),这里堆积的 composer_*.zip 和 php*.phar 常比缓存还难察觉。
- 查真实路径:
php -r "echo sys_get_temp_dir();" - Linux/macOS 清理:
find $(php -r "echo sys_get_temp_dir();") -name "composer_*" -delete 2>/dev/null - 长期方案:启动时重定向,例如
TMPDIR="/mnt/data/tmp" php composer install,避免污染系统级/tmp - Windows 用户可在资源管理器直接搜索
composer_,手动删掉匹配项
缓存路径、vcs/、files/、系统临时目录——这四块地方不一起看,光跑 clear-cache 就永远清不完。尤其 vcs/ 和 sys_get_temp_dir() 是最容易被跳过的隐形消耗源。

















