直接清理 provider 缓存目录而非 composer clear-cache,因后者不删 packages.json 和 provider-*.json;需用 composer config --list | grep repositories.packagist.url 验证镜像是否生效,composer ≥ 2.5 用 --refresh,≤ 2.4 手动删除对应 repo 目录,并删 composer.lock。

直接清理 provider 缓存目录,而不是运行 composer clear-cache —— 后者对元数据完全无效,只会让你白忙活。
确认当前真正生效的镜像地址
很多人改了配置却没生效,是因为项目级 composer.json 中的 repositories 字段会彻底屏蔽全局设置。别信自己“记得配过”,用命令验证:
-
composer config --list | grep repositories.packagist.url—— 如果返回空,说明当前根本没走镜像 -
composer config -g repos.packagist.url—— 注意是复数repos,写成repo在 Composer 2.2+ 中静默失效 -
composer config repos.packagist.url—— 查项目级是否覆盖,输出非空即表示被劫持
手动验证镜像元数据接口是否可达且同步
composer diag 不测镜像,它只连 https://packagist.org,跟你配的阿里云/腾讯云无关。真要验证,必须模拟 Composer 实际行为:
-
curl -I https://mirrors.aliyun.com/composer/packages.json—— 必须返回HTTP/2 200,否则镜像不可用 -
curl -I https://mirrors.aliyun.com/composer/p/vendor/package-name.json—— 看Last-Modified时间戳是否接近当前时间,404 或时间差超 1 小时,说明该包未同步 - 注意 URL 末尾斜杠:缺
/会导致所有p/路径 404,比如https://mirrors.aliyun.com/composer是错的,必须是https://mirrors.aliyun.com/composer/
强制刷新 provider 缓存(不是清整个 cache)
composer clear-cache 只删 ZIP 和 VCS 缓存,对 packages.json 和 provider-*.json 几乎没影响。正确做法分版本:
- Composer ≥ 2.5:
composer update --refresh—— 精准丢弃元数据缓存,保留已下载包,最快最安全 - Composer ≤ 2.4:手动删对应目录:
rm -rf $(composer config --global cache-dir)/repo/https---mirrors.aliyun.com-composer(Windows 路径为%APPDATA%\Composer\cache\repo\https---mirrors.aliyun.com-composer) - 别忘了删
composer.lock—— 它硬编码旧 provider 地址,不删就一直 fallback 到失效 URL
最常被忽略的一点:子模块里报 “Could not find package”,大概率是 git submodule update --init --recursive 根本没执行,目录为空,Composer 连 composer.json 都读不到——这一步和镜像完全无关,但现象一模一样。











