composer clear-cache 默认不清理 vcs/ 目录,因其仅清 files/ 和 repo/,而 vcs/ 中每个 git 裸仓库占 300–800 mb;还需手动删 sys_get_temp_dir() 下的临时 zip/phar 文件及插件私有缓存,并确认真实缓存路径是否被 composer_cache_dir 环境变量覆盖。

composer clear-cache 为什么删不干净 ~/.composer/cache/vcs/
因为 composer clear-cache 默认跳过 vcs/ 目录——它只清理 files/ 和 repo/,而 Git 克隆缓存(每个裸仓库 300–800 MB)全堆在 vcs/ 里,不手动删,磁盘空间根本下不来。
确认是否真有残留:ls -la $(composer config --global cache-dir)/vcs/。如果看到一堆以 git-* 开头的目录,基本就是它了。
- Linux/macOS:运行
rm -rf $(composer config --global cache-dir)/vcs/* - Windows(CMD):运行
rd /s /q "%APPDATA%\Composer\Cache\vcs" - 删完立刻验证:
ls $(composer config --global cache-dir)/vcs应报No such file or directory
临时 ZIP 和 PHAR 文件藏在系统 tmp 目录里
composer clear-cache 完全不碰 sys_get_temp_dir() 下的文件,但 Composer 下载时会把 composer_*.zip、php*.phar 往这儿写,长期堆积可占数 GB。
查位置:php -r "echo sys_get_temp_dir();";常见路径包括 /tmp(Linux/macOS)、C:\Users\XXX\AppData\Local\Temp(Windows)。
- Linux/macOS:
find $(php -r "echo sys_get_temp_dir();") -name 'composer_*' -o -name 'php*.phar' -type f -mtime +30 -delete - Windows PowerShell:
Get-ChildItem $env:TEMP -Filter "composer_*" -Recurse | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)} | Remove-Item - 别用
rm -rf /tmp/*这种暴力操作——可能误删正在运行的进程临时文件
插件私有缓存被 clear-cache 忽略
某些 Composer 插件(如旧版 hirak/prestissimo、roave/security-advisories)会在 ~/.composer/cache/ 下建独立子目录,比如 prestissimo/ 或 advisories/,clear-cache 不识别这些路径,自然不删。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
查插件缓存是否存在:ls -la $(composer config --global cache-dir) | grep -E "(prestissimo|advisories|security)"。
- 确认是插件缓存后,直接
rm -rf对应目录(例如rm -rf $(composer config --global cache-dir)/prestissimo) - 不确定用途?先
mv备份再测试:mv $(composer config --global cache-dir)/prestissio /tmp/prestissimo.bak - 插件文档一般会注明缓存路径,优先查
composer show hirak/prestissimo或其 GitHub README
缓存路径被环境变量或镜像覆盖导致删错地方
如果设置了 COMPOSER_CACHE_DIR 或公司内部镜像强制重定向缓存路径,composer config --global cache-dir 输出的可能是假路径,clear-cache 实际清的是空目录。
验证真实缓存路径:php -r "var_dump(getenv('COMPOSER_CACHE_DIR'));";若输出非空,就以它为准。
- Linux/macOS:删前加一句
export COMPOSER_CACHE_DIR="/your/real/path"再执行rm -rf $COMPOSER_CACHE_DIR - Windows:在 CMD 中用
set COMPOSER_CACHE_DIR=C:\real\path,PowerShell 中用$env:COMPOSER_CACHE_DIR="C:\real\path" - 删完运行
composer config --global cache-dir和php -r "var_dump(getenv('COMPOSER_CACHE_DIR'));"对照,确保二者一致且目录为空
真正难处理的不是删不掉,而是删完又自动长出来——比如 CI/CD 流水线反复跑 composer install 却没加 --no-cache,或者本地 IDE 后台静默拉包。清理必须配合使用习惯调整,否则下周又满。










