Composer缓存目录需通过php -r "echo Composer\Config::getCacheDir() . PHP_EOL;"动态获取,不可硬编码;缓存分files/repo/vcs三类,应按修改时间分别清理,避免直接rm -rf或误用composer self-update --clean-cache。

Composer缓存目录位置必须先确认
Composer默认把包缓存存在 ~/.composer/cache(Linux/macOS)或 %APPDATA%\Composer\cache(Windows),但实际路径可能被 COMPOSER_CACHE_DIR 环境变量覆盖。不查清楚就写清理脚本,容易删错目录。
执行这条命令能准确定位:
php -r "echo Composer\Config::getCacheDir() . PHP_EOL;"
- 输出路径可能和文档写的不一样,尤其在 CI 环境或 Docker 容器里
- 如果用了自定义镜像源(比如阿里云、华为云),缓存结构不变,但内容是镜像代理后的 zip 包和 metadata,仍需按原逻辑清理
- 别直接
rm -rf ~/.composer/cache—— Composer 正在运行时删缓存可能导致file not found或下载中断
用 composer self-update --clean-cache 不够用
composer self-update --clean-cache 只清 Composer 自身的更新缓存(比如 self-update 下载的 phar 文件),不是项目依赖包缓存。它对 vendor/ 下载来源的 zip 和 dist 缓存完全没影响。
- 这个命令甚至不会触碰
cache/files/或cache/repo/目录 - 它的作用域仅限于
~/.composer/cache/archive/下的 Composer 二进制更新包 - 想清依赖缓存,必须手动处理
cache/files/(zip 包)、cache/repo/(packagist 元数据)、cache/vcs/(Git clone 缓存)
自动清理脚本要区分缓存类型和保留策略
Composer 缓存分三类,清理逻辑不同:files/ 存下载的 zip/tar 包(最大最占空间),repo/ 存 JSON 元数据(小但易堆积),vcs/ 是 Git clone 的 bare repo(改代码频繁时增长快)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
推荐用 find 按修改时间清理,例如只保留最近 7 天:
find "$COMPOSER_CACHE_DIR/files" -name "*.zip" -type f -mtime +7 -delete<br>find "$COMPOSER_CACHE_DIR/repo" -name "*.json" -type f -mtime +7 -delete<br>find "$COMPOSER_CACHE_DIR/vcs" -mindepth 1 -maxdepth 1 -type d -mtime +7 -exec rm -rf {} +-
-mtime +7表示“7 天前修改的”,不是“创建超过 7 天”,而 Composer 缓存文件写入时间 ≈ 下载完成时间,基本可靠 -
vcs/目录下是带哈希名的子目录,不能用*.git匹配,得按目录时间删 - 别用
composer clear-cache替代 —— 它清全部且无条件,CI 构建中频繁调用会拖慢速度
放进 crontab 或 GitHub Actions 要注意权限和并发
定时任务跑清理脚本,最容易出问题的是权限和竞态:Composer 正在写缓存时脚本删了正在用的 zip,会导致后续 install 报 file could not be downloaded 或校验失败。
- 加个简单锁文件检查:
[ -f "$COMPOSER_CACHE_DIR/.lock" ] && exit 0(虽然 Composer 不自带 lock,但可自己约定) - crontab 示例(每天凌晨 2 点):
0 2 * * * cd /tmp && COMPOSER_CACHE_DIR=$(php -r "echo Composer\Config::getCacheDir();") /path/to/clean-composer-cache.sh >> /var/log/composer-clean.log 2>&1 - GitHub Actions 中建议用
run: composer clear-cache更稳妥 —— 因为每次 job 是干净环境,不存在并发写缓存的问题
真正麻烦的是私有镜像服务(如 Satis、Private Packagist)搭配本地缓存时,元数据过期时间可能和镜像同步节奏不一致,这时光删本地缓存没用,得配合镜像的 TTL 配置一起看。

















