答案是必须同步清理三处:先composer clear-cache,再删~/.composer/cache/repo/https---packagist.org/、vendor/composer/installed.json和composer.lock;否则update仍复用旧元数据与版本锁定。

composer update 拉不到新版本,90% 不是网络或镜像问题,而是本地缓存没清干净——尤其 composer.lock 和 ~/.composer/cache/repo/https---packagist.org/ 这两处留着,update 就永远只在旧快照里打转。
为什么 composer clear-cache 经常没用?
它只删 ~/.composer/cache/files/(ZIP 包)和 vcs/(Git 克隆),但真正决定“有没有新版本”的元数据,在 repo/https---packagist.org/ 里;而“该不该装新版本”,又由 vendor/composer/installed.json 和 composer.lock 硬编码锁定。
- 运行
composer clear-cache后仍显示Reading /path/to/cache/packages.json→ 元数据根本没刷新 -
composer update输出nothing to install or update,但 Packagist 页面明明有 v2.5.0 → 锁文件或 installed.json 拦着了 - 删了
vendor/却不删composer.lock→ 下次install还是装旧版
必须同步清理的三个位置(顺序不能错)
缺一不可,否则白操作:
- 先跑
composer clear-cache(清基础缓存,避免干扰) - 再删元数据目录:
rm -rf $(composer config --global cache-dir)/repo/https---packagist.org/ - 删本地安装快照:
rm -f vendor/composer/installed.json - 删锁文件:
rm -f composer.lock
Windows 用户注意:$(composer config --global cache-dir) 在 PowerShell 中需写成 $(composer config --global cache-dir).Trim(),或直接用 $env:APPDATA\Composer\Cache\repo\https---packagist.org\。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
验证 metadata 是否真刷新了
别信执行完就 OK,要亲眼看到 Composer 重新拉远端索引:
- 运行
composer update --dry-run -v - 盯紧输出末尾:如果出现
Downloading https://packagist.org/packages.json→ 成功 - 如果只有
Reading /path/to/cache/packages.json→ 元数据目录没删干净,重来 - 额外提醒:若项目设了
"minimum-stability": "stable",而目标包只发了dev或beta版,那即使 metadata 刷新了也看不到——这不是缓存问题,是约束本身在过滤
缓存损坏导致 Failed to extract 怎么办?
这类错误不是网络中断,而是 ~/.composer/cache/files/ 下某个 ZIP 文件结构损坏(比如下载一半断电)。composer clear-cache 会清空整个 files/,但 Composer 重装时可能跳过校验、直接复用已损坏副本。
- 盯住
composer install -v输出末尾,找类似Extracting vendor/symfony/console的行,提取包名(如symfony/console) - 进
files/目录,模糊搜索:ls -l *symfony*console*.zip(Linux/macOS)或 PowerShell 中Get-ChildItem "$env:APPDATA\Composer\Cache\Files" -Recurse -Filter "*console*.zip" - 仅删除匹配的 ZIP 文件,别碰
repo/和vcs/ - 删 ZIP 后还报错?说明
composer.lock里硬编码的dist.sha256值与新内容不匹配 → 必须同步删vendor/和composer.lock
最易被忽略的是 composer.lock。很多人删了缓存、删了 installed.json,却留着它,结果 update 依然原地不动——因为 Composer 认为“锁文件没变,就不需要动版本”。










