composer clear-cache 清空 ~/.composer/cache/ 下 repo/、files/、downloads/ 三个子目录,不影响 vendor/ 和 composer.json;它解决元数据过期问题,但不改变版本约束,故清缓存后 update 仍按 composer.json 安装。

直接运行 composer clear-cache 就能清掉所有已下载的包缓存,但实际执行前得先确认它到底清什么、会不会误删项目文件、以及为什么有时候清了还拉不到新版包。
缓存位置在哪?composer clear-cache 清的是哪些文件
Composer 缓存默认存在用户主目录下:~/.composer/cache/(Linux/macOS)或 %APPDATA%\Composer\Cache\(Windows)。这个命令会清空其中的 repo/(包元数据)、files/(解压后的源码归档)、downloads/(原始 zip/tar 包)三个子目录。它不会碰你的项目 vendor/ 或 composer.json,也不会删除全局配置。
- 清
repo/:下次composer install会重新抓 packagist.org 的包列表(比如哪些版本可用) - 清
files/:已安装过的包归档会被删,重装时需重新解压(不影响功能,但稍慢) - 清
downloads/:所有下载过的原始压缩包被删,下次 install/update 会重新下载
什么时候必须用 composer clear-cache
不是每次更新都要清缓存。真正需要它的情况很具体:
- 遇到
Could not parse version constraint ... Invalid version string且确认composer.json没写错——可能是本地 repo 缓存里残留了旧版 packagist 元数据 - 刚切换了国内镜像源(如阿里云、腾讯云),但
composer update仍报 404 或找不到包——缓存里的 repo 地址没自动刷新 - 手动修改过
~/.composer/auth.json(比如加了私有仓库 token),但 composer 仍提示认证失败——部分认证信息可能被缓存在 repo 目录中 - 磁盘空间告急,而
~/.composer/cache/占了几个 GB(常见于长期未清理的 CI 机器或开发环境)
clear-cache 执行后为什么 composer update 还拉不到新版本
清缓存 ≠ 强制更新依赖。它只解决「本地元数据过期」问题,不改变你项目里 composer.json 中声明的版本约束。比如你写的是 "monolog/monolog": "^2.0",即使 monolog 已发布 3.0,clear-cache 后 composer update 依然只会装 2.x 最新版。
如果目标是升级到突破性版本(如 2→3),必须手动改 composer.json;如果想强制重算所有依赖并尝试升到允许范围内的最新版,用 composer update --with-all-dependencies,而不是指望清缓存。
另外注意:某些私有 Packagist 镜像(如 Satis、Private Packagist)若配置了 repositories 且类型为 composer,其元数据也走缓存机制——清完缓存后首次访问该源会明显变慢,这是正常现象。
不想全清?可以只删特定目录
如果只想释放空间又怕影响速度,可以跳过 clear-cache,直接进缓存目录删大文件:
rm -rf ~/.composer/cache/files/* # 或只删一年前的下载包(Linux/macOS) find ~/.composer/cache/downloads -name "*.zip" -mtime +365 -delete
但别手动删 repo/ 下的 packages.json 或哈希目录——结构损坏会导致后续命令反复报错,不如直接 clear-cache 干净。
缓存是否启用、路径是否自定义,都由 composer config --global cache-dir 和 cache-files-ttl 等配置控制,这些细节常被忽略,但恰恰决定清缓存后第一次 install 的耗时和网络请求量。










