答案是composer update --refresh(≥2.5)可强制丢弃本地缓存的packages.json和provider-*.json,从当前生效镜像源重拉最新元数据,不重下zip包;执行前须确认全局镜像配置正确且未被项目级repositories覆盖。

Composer 镜像同步不及时,根本没法“手动触发源站同步”——镜像站的同步逻辑是服务端定时轮询或按需拉取,客户端没有任何 API 或命令能强制它立刻更新。你真正能控制的,只有本地如何重新获取最新元数据。
composer diag 不测镜像,别被它骗了
composer diag 默认只连 https://packagist.org,完全无视你配置的镜像地址。它返回 “Connection failed” 只说明本地 PHP 环境(curl、OpenSSL、系统时间)可能有问题,不代表你的阿里云/腾讯云镜像挂了。
- 查真实生效镜像:运行
composer config -g repo.packagist(注意是单数repo,不是repos) - 验证镜像连通性:用
curl -I https://mirrors.aliyun.com/composer/packages.json,必须返回HTTP/2 200 - 如果
diag报错但镜像curl通,问题在本地环境,不是镜像同步慢
缓存路径和元数据刷新不匹配,清错目录白忙活
composer clear-cache 只删 ZIP 包和部分 JSON,对决定“有没有这个包”的 packages.json 和 provider-*.json 几乎无效。这些文件存在 ~/.composer/cache/repo/https---mirrors.aliyun.com-composer 这类路径下,名字由镜像 URL 转义生成。
- 先确认缓存位置:
composer config --global cache-dir - 再进 repo 子目录看实际路径:
ls -d $(composer config --global cache-dir)/repo/https---* - 删错目录(比如删了
https---packagist.org却配着阿里云镜像)就等于没操作 - Windows 用户路径类似
%APPDATA%\Composer\cache\repo\https---mirrors-aliyun-com-composer
composer update --refresh 是最轻量精准解法
composer update --refresh(Composer ≥ 2.5)专为解决同步延迟设计:它丢弃所有缓存的元数据文件(packages.json、provider-*.json),强制从当前配置的镜像源重拉最新索引,但保留已下载的 ZIP 包缓存。
- 执行前务必确认
composer config -g repo.packagist输出是你期望的镜像地址 - 项目级
composer.json里有"repositories"字段会完全屏蔽全局配置,此时要查composer config repo.packagist(不带-g) - 老版本 Composer(--refresh,只能手动删对应
repo/子目录 - 加
--no-cache -v可看到终端输出的真实请求 URL,确认是否命中你配的镜像
镜像间元数据不一致时,别硬等,换源比等更可靠
不同镜像站(阿里云、腾讯云、中科大)轮询节奏不同,同一时刻查到的版本可能差一个 patch。比如你在阿里云镜像查不到 v3.6.0,但中科大镜像已有,直接切过去就行:
- 临时切换:
composer config -g repo.packagist composer https://mirrors.ustc.edu.cn/composer/ - 切完立刻跑
composer update --refresh,避免复用旧缓存 - CI/CD 中必须显式指定源:
composer install --repository=https://mirrors.ustc.edu.cn/composer/ --no-cache - 别依赖“最快镜像”,优先选同步稳定、节点多的(如中科大、华为云),而非单纯 ping 值低的
真正卡住你的从来不是镜像同步慢,而是你误以为 clear-cache 或 diag 能解决问题,结果反复操作却没碰对缓存路径或没确认配置是否真生效。











