Composer update卡顿主因是三处元数据残留未清:packagist元数据缓存、vendor/composer/installed.json、composer.lock;仅clear-cache无效,须按序清理这三处并验证Download包索引。

Composer update 本身不产生需要手动清理的“临时缓存”——真正卡住更新、导致拉不到新版本的,是三处被误认为“已清”的元数据残留:元数据快照、本地安装记录、锁文件。
为什么 composer clear-cache 经常白忙一场
它只删 ~/.composer/cache/files/(ZIP 包)和 vcs/(Git 克隆),但 update 决定“有哪些新版本”的依据,其实是 ~/.composer/cache/repo/https---packagist.org/ 下的 packages.json 和 provider-*.json。这些文件没删,Composer 就永远读旧索引。
- 执行
composer clear-cache后仍update不到新版?大概率是这目录还活着 - Windows 用户注意:
$(composer config --global cache-dir)在 PowerShell 中需加.Trim(),或直接用$env:APPDATA\Composer\Cache\repo\https---packagist.org\ - 别信日志里 “Loading composer repositories”,要盯紧有没有
Downloading https://packagist.org/packages.json
必须同步清理的三个位置(顺序不能错)
少一个,update 就可能复用旧状态:
- 先运行
composer clear-cache(清基础缓存,避免干扰) - 再删元数据目录:
rm -rf $(composer config --global cache-dir)/repo/https---packagist.org/ - 删本地安装快照:
rm -f vendor/composer/installed.json - 删锁文件:
rm -f composer.lock
删 composer.lock 是最易被跳过的一步——它硬编码了每个包的 dist.sha256 和 source.reference,不删它,update 就默认“无需变更”。
验证是否真刷新了 metadata
别靠感觉,用 --dry-run -v 看真实网络行为:
- 运行
composer update --dry-run -v - 如果输出里只有
Reading /path/to/cache//packages.json,说明元数据没清干净,重走上面三步 - 看到
Downloading https://packagist.org/packages.json且时间戳是当前日期,才算成功 - 若仍看不到目标版本,检查
"minimum-stability": "stable"是否过滤掉了dev或beta版本——这不是缓存问题
真正麻烦的从来不是“怎么删”,而是删完发现 composer.lock 还在那儿静静躺着,让整个更新流程原地冻结。











