答案是composer update --refresh(≥2.5)强制刷新元数据缓存,仅删除packages.json和provider-*.json并重拉最新索引,不触碰zip、vendor或lock;根本原因是composer默认复用15分钟内不过期的本地元数据快照,导致镜像已更新却无法识别新版本。

直接结论:用 composer update --refresh(Composer ≥ 2.5)是最准、最轻量的解法,它只删元数据缓存(packages.json 和 provider-*.json),不碰 ZIP 包,也不改 vendor 或 composer.lock。
为什么 composer update 不拉新版本?
不是网络问题,也不是镜像没同步——而是 Composer 默认读 ~/.composer/cache/repo/https---mirrors.aliyun.com-composer/packages.json 这类本地快照,15 分钟内不过期。哪怕阿里云镜像站已上线 monolog/monolog 的 3.6.0,你本地缓存里还是 3.5.0 的记录,composer update monolog/monolog 就会直接返回 Nothing to install or update。
常见误判点:
-
composer clear-cache清的是 ZIP 包和 provider 缓存,但packages.json快照仍被复用,下次 update 立刻重建并继续用它 - 删
vendor/或composer.lock后跑composer install,它仍按 lock 里旧哈希装包,根本不会查远程新版本 - 只改
composer.json里的版本约束却不加--no-cache,结果还是从缓存里挑旧快照匹配
composer update --refresh 到底做了什么?
它专为元数据延迟设计:强制删除当前生效镜像源下的所有 packages.json 和 provider-*.json,然后从 composer config -g repo.packagist 指向的 URL(比如 https://mirrors.aliyun.com/composer/)重新下载最新索引。
执行前必须确认三件事,否则 --refresh 会去错地方拉或根本无效:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 运行
composer config -g repo.packagist,输出必须是 HTTPS 地址(如https://mirrors.aliyun.com/composer/),HTTP 会被静默拦截 - 运行
composer config --global cache-dir查出缓存根目录,再进repo/子目录确认对应路径存在(如https---mirrors.aliyun.com-composer),路径名是 URL 转义结果,大小写和符号必须严格匹配 - 运行
composer config --list | grep repositories,确保项目级composer.json没写"repositories"字段——只要写了,全局镜像配置就彻底失效,--refresh会按项目里写的 URL 去拉,而那个 URL 很可能已 404
老版本 Composer(≤ 2.4)怎么办?
不支持 --refresh,只能手动删元数据缓存目录:
- Linux/macOS:
rm -rf ~/.composer/cache/repo/https---mirrors.aliyun.com-composer - Windows:
rd /s /q "%APPDATA%\Composer\Cache\repo\https---mirrors.aliyun.com-composer"
删完必须立刻触发一次 composer update monolog/monolog 或 composer show -d,否则缓存不会重建;别用 composer clear-cache 替代——它清的是 ~/.composer/cache/files/ 下的 ZIP,对元数据完全无效。
验证是否真刷新成功
不能只看命令是否跑完,得验证新版本是否被识别:
- 立刻试装:
composer update monolog/monolog,观察输出里是否出现你要的版本号(如3.6.0) - 用
composer show monolog/monolog看可用版本列表,确认新版本在列 - 临时绕过镜像验证:加
--repository-url=https://packagist.org直接查官方源,排除镜像本身未同步的可能
最易忽略的点:缓存路径名是 URL 全字符转义结果(/ → ---,. → -),少一个短横或大小写错,删了也白删;且 Windows 下路径要用 %APPDATA% 而非 ~,否则删错目录。










