Composer update不拉新版本,根本原因是未清理三处关键位置:~/.composer/cache/repo/https---packagist.org/(元数据索引)、vendor/composer/installed.json(已装包快照)和composer.lock(版本锁定文件),clear-cache命令对此完全无效。

Composer update 不拉新版本,不是缓存“没清干净”,而是它根本没去读新元数据——clear-cache 命令压根不碰真正决定“有哪些版本”的三处关键位置。
为什么 composer clear-cache 总是没用
clear-cache 只删 ~/.composer/cache/files/(ZIP 包)和 vcs/(Git 克隆),但以下三处它完全不动:
-
~/.composer/cache/repo/https---packagist.org/:存着packages.json和provider-*.json,update靠它判断“哪些包、哪些版本存在” -
vendor/composer/installed.json:记录当前已装包的精确版本,依赖解析时直接读它 -
composer.lock:硬编码了每个包的version、dist.sha256和source.reference,只要它在,update就不会升版
必须同步清理的三个位置(顺序不能错)
执行前先确认全局缓存路径:composer config --global cache-dir
- 先运行
composer clear-cache(清基础缓存,避免干扰) - 再删元数据目录:
rm -rf $(composer config --global cache-dir)/repo/https---packagist.org/(Linux/macOS);Windows 用户用rm -rf %APPDATA%\Composer\Cache\repo\https---packagist.org\ - 删本地状态快照:
rm -f vendor/composer/installed.json - 删锁文件:
rm -f composer.lock
验证是否真刷新了元数据
别信“跑完就 OK”,要亲眼看到 Composer 重拉远端索引:
- 运行
composer update --dry-run -v - 紧盯输出里有没有
Downloading https://packagist.org/packages.json - 如果只显示
Reading /path/to/cache/packages.json,说明第二步删得不彻底,重来
镜像源配置失效也会伪装成缓存问题
即使三处都清了,update 还是慢或看不到新版,很可能是镜像没生效:
- 检查项目级
composer.json是否写了"repositories"字段——只要存在,就会覆盖全局镜像配置 - 运行
composer config --list | grep repositories,确认repositories.packagist.url是你设的镜像地址(如https://mirrors.aliyun.com/composer/) - Composer ≥ 2.5 可直接加
--refresh强制重拉元数据;≤ 2.4 必须手动删对应镜像缓存目录,比如rm -rf $(composer config --global cache-dir)/repo/https---mirrors-aliyun-com-composer
最容易被跳过的其实是 composer.lock。删了缓存、删了 installed.json,却留着它,update 就会原地不动——因为 Composer 认为“锁文件没变,就不需要动版本”。











