最准最快查全局镜像用 composer config -g repo.packagist,返回阿里云地址即已配置,空或报错则走官方源;项目级以 composer config repositories 为准,仅 repositories.packagist.org 是 Composer 7+ 认证主源标识符。

直接查全局镜像地址用 composer config -g repo.packagist
这是最准、最快的方式。执行后如果返回类似 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},说明已配置阿里云镜像;若返回空或报错 Could not find package repo.packagist in global config,代表当前走的是官方源 https://packagist.org,且没显式设过镜像。
注意:键名必须是 repo.packagist(单数),不是 repos.packagist 或 repositories.packagist.org —— 后两者在新版 Composer 中要么不生效,要么返回冗余信息。
查项目级镜像优先看 composer config repositories
项目级配置比全局高,所以即使全局设了镜像,只要项目 composer.json 里写了 "repositories",就会以它为准。运行 composer config repositories 能直接看到当前项目生效的源列表:
- 输出含
"packagist.org": { "type": "composer", "url": "..." }→ 表示项目用了自定义镜像 - 输出为空或只显示
[]→ 说明项目没覆盖镜像,退回到全局或默认源 - 如果看到
"packagist": { ... }(没带.org)→ 是旧写法,仍可工作,但建议统一用packagist.org避免歧义
别被 --list 输出绕晕,重点盯 repositories.packagist.org
composer config -g --list --verbose 会吐出一大坨配置,容易看花眼。真正管用的字段只有 repositories.packagist.org 这一项 —— 它才是 Composer 7+ 认证的 Packagist 主源标识符。
常见干扰项:
-
repositories.packagist:旧版残留字段,可能还存在但已不参与实际请求路由 -
repositories下一堆第三方源:比如私有包仓库,和 Packagist 镜像无关 -
http-basic或github-oauth:认证相关,不影响镜像地址判断
真实请求走哪,最终以网络抓包或 composer -vvv update 的日志里出现的 GET https://xxx/composer/.../packages.json 为准。
镜像失效时,别只改配置,先清缓存再验证
改完 repo.packagist 后,composer update 仍连旧地址?大概率是本地缓存没清干净。
- 运行
composer clear-cache强制清掉所有元数据缓存 - 删掉项目下的
vendor/和composer.lock(可选,用于彻底重装验证) - 加
-vvv参数重试:composer -vvv require monolog/monolog,观察日志里实际请求的 URL
一个容易忽略的点:某些公司内网会劫持 DNS 或代理所有 packagist.org 请求,此时即使配置了镜像,curl -I https://mirrors.aliyun.com/composer/ 能通,但 Composer 内部仍可能 fallback 到官方源 —— 这时候得结合 strace 或 Wireshark 看真实 TCP 连接目标。










