直接运行 composer clear-cache 仅清理 files/、repo/ 子目录,不删 vcs/ 目录;需先用 composer config --global cache-dir 确认真实路径,超 1.5 gb 且半年未用才值得清理,vcs/ 手动删除可释放 300–800 mb 空间。

直接运行 composer clear-cache 就能清掉中文镜像环境下的本地缓存,但它只动 ~/.composer/cache(Linux/macOS)或 %APPDATA%\Composer\Cache(Windows)里的内容,不碰 vendor/、composer.lock 或镜像配置本身——这点必须先确认清楚,否则容易误以为“清了没用”其实是删错了地方。
怎么确认 Composer 正在用哪个缓存路径?
中文镜像环境(如阿里云、腾讯云、华为云)不会改变缓存默认位置,但可能通过 COMPOSER_CACHE_DIR 环境变量或全局 config 覆盖它。执行以下命令才能看到真实路径:
-
composer config --global cache-dir—— 输出当前生效的缓存根目录 -
echo $COMPOSER_CACHE_DIR(Linux/macOS)或echo %COMPOSER_CACHE_DIR%(Windows)—— 检查环境变量是否被设过 - 如果输出是空或指向非预期路径,说明镜像源配置没影响缓存位置,但可能影响
repo/里元数据的来源和时效
为什么清了缓存还是拉不到新包?
中文镜像环境下的典型误判,根源不在缓存,而在镜像服务端缓存或本地锁文件:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer.lock存在 →composer install必然还原旧版本,跟缓存无关 - 镜像 CDN 有 TTL(通常 24 小时)→
clear-cache只清本地repo/,不刷新镜像服务器上的packages.json - 私有包打了新 tag 但没推新 commit → Composer 复用本地解压结果,根本不会触发远程请求,这时清缓存才有效
- 想强制升版:先
rm composer.lock,再composer update或composer install --no-cache(注意--no-cache是跳过本次读写,不是清缓存)
手动清理 vcs/ 目录释放大块空间
中文镜像环境下,composer clear-cache 默认不清理 vcs/ 目录,而它单个 Git 裸仓库就能占 300–800 MB。这是最常被忽略的“空间黑洞”:
- 先确认路径:
composer config --global cache-dir,然后进$(composer config --global cache-dir)/vcs/ - 安全清理:
rm -rf ~/.composer/cache/vcs/*(Linux/macOS)或rmdir /s %APPDATA%\Composer\Cache\vcs\*(Windows) - 下次需要时会自动重建,不影响功能;但首次
composer update某个 Git 包时会稍慢 - 别删
repo/packagist.org/—— 这是核心元数据快照,删了会导致首次 update 明显变慢
clear-cache 在 CI/CD 中必须加 --no-interaction
GitHub Actions、GitLab CI 等非交互环境里,composer clear-cache 默认会卡住等待确认。不加参数等于白跑:
- 正确写法:
composer clear-cache --no-interaction - 更彻底的组合(适合镜像环境 CI):
composer clear-cache --no-interactionrm -rf vendorcomposer install --no-interaction --prefer-dist - 避免依赖
post-install-cmd脚本 —— CI 通常用--no-scripts跳过所有脚本 - 如果缓存挂载在共享卷上(如 NFS),
clear-cache只清当前节点路径,不保证其他节点同步
真正容易被忽略的是:切换中文镜像源后首次 composer update 变慢,不是 bug,是设计使然——元数据必须重新 fetch,repo/ 缓存为空时就会这样。










