composer clear-cache 默认只清理 repo/、files/、vcs/、archives/ 四个子目录,不删除缓存根目录下其他文件或 vendor/、composer.lock 等项目文件。

composer clear-cache 默认只清哪些子目录
composer clear-cache 不是删空整个 ~/.composer/cache(Linux/macOS)或 %APPDATA%\Composer\Cache(Windows),它只清理其中几个固定子目录:repo/(包元数据)、files/(下载的 .zip/.tar 包)、vcs/(Git 克隆缓存)、archives/(解压临时归档)。它**不会碰** cache-dir 下的其他文件,比如手动放进去的调试文件,也不会动 vendor/、composer.lock 或全局配置。
为什么执行后 du -sh 显示缓存大小没变
常见现象:命令返回 Clearing cache (xxx),但 du -sh $(composer config --global cache-dir) 体积几乎不变。可能原因包括:
- 权限错乱——部分子目录属主是
root,普通用户运行clear-cache会静默跳过,不报错也不删;用ls -ld $(composer config --global cache-dir)和ls -l $(composer config --global cache-dir)看属主和各子目录权限 - 缓存路径被自定义过,而
clear-cache只清composer config --global cache-dir指向的位置,不会扫描其他可疑路径 - 某些 Composer 插件或 CI 脚本把临时文件写在了缓存根目录下,不在标准子目录里,
clear-cache不识别也不处理
手动删整个 cache 目录比 clear-cache 更彻底
当 clear-cache 失效或你想 100% 彻底清空时,直接删整个缓存目录是更可靠的做法:
- Linux/macOS:
rm -rf $(composer config --global cache-dir) - Windows CMD:
rmdir /s /q "%APPDATA%\Composer\Cache" - Windows PowerShell:
Remove-Item -Recurse -Force "$env:APPDATA\Composer\Cache"
⚠️ 注意:删之前确认没有 composer install、update 或 CI 构建正在后台运行,否则可能触发 Corrupted cache file 错误,后续命令会反复失败。
CI/CD 中并发构建导致 clear-cache 失败
多个 Job 共享同一缓存路径(如默认的 ~/.composer/cache)时,clear-cache 容易因竞态失败:一个 Job 正在删 vcs/,另一个同时往里写 Git 仓库,结果报 Directory not empty 或 Access is denied。这不是命令问题,而是路径冲突。
解法是让每个 Job 拥有独占缓存:
- Linux/macOS Pipeline:
export COMPOSER_CACHE_DIR="${WORKSPACE}/.composer-cache" - Windows:
set COMPOSER_CACHE_DIR="%WORKSPACE%\.composer-cache"
这样 clear-cache 就只操作当前 Job 的私有目录,互不干扰——这个设置比反复修权限或重试命令有效得多。
缓存路径隔离和权限归属,是多数人忽略但真正决定 clear-cache 是否“生效”的两个底层点。











