composer config -g repo.packagist 是查看全局 packagist 镜像源最快最准的方式;缺 -g 会误查项目配置,常见错误是全局配了镜像但项目未覆盖导致失效,需用 composer config -l | grep repo.packagist 查合并后实际生效项,再结合 composer diagnose 验证连通性,并注意 composer.json 中 repositories 字段可能强制覆盖镜像配置。

composer config -g repo.packagist
这条命令能直接查到全局配置的 Packagist 镜像源,是最快最准的方式。注意不是 composer config repo.packagist(缺 -g 会查当前项目配置,容易误判)。
常见错误现象:composer config repo.packagist 返回空或默认值,但实际走的是国内镜像——大概率是因为你只配了全局源,项目里没覆盖。
- 如果返回
{"type": "composer", "url": "https://packagist.phpcomposer.com"}这类地址,说明用了旧镜像(已停用),得换 - 返回
{"type": "composer", "url": "https://packagist.org"},代表没设镜像,走官方源 - 返回
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}或https://packagist.proxy.huawei.com,就是对应阿里或华为镜像
composer config -l | grep repo.packagist
当不确定配置层级(全局 / 项目)时,用这个命令列出所有生效的 repo.packagist 配置项,grep 能过滤出真正起作用的那一行。
使用场景:项目里执行 composer install 明明很慢,但 composer config repo.packagist 又没输出——这时候跑一遍 composer config -l | grep repo.packagist,常会发现全局源被禁用(repo.packagist false),或者项目里写了错误 URL。
-
-l表示 list,会合并全局 + 当前项目配置,冲突时项目优先 - 如果输出两行,一行
repo.packagist、一行repo.packagist.org(旧键名),说明配置混用了,以repo.packagist为准 - 某些低版本 Composer(如 1.x)不支持
repo.packagist键,只认repo.packagist.org,得看版本再判断
composer diagnose 检查源是否可用
composer diagnose 不直接显示源地址,但它会验证当前配置的镜像能否连通、响应是否正常。很多“查到了源却还是慢/失败”的问题,靠它才能暴露。
典型表现:composer config -g repo.packagist 显示阿里云地址,但 composer update 卡在 “Loading composer repositories…” —— 这时候跑 composer diagnose,很可能报 The repository 'https://mirrors.aliyun.com/composer/' is not accessible。
- 检查前确保网络能访问该镜像域名(比如
curl -I https://mirrors.aliyun.com/composer/) - 如果诊断提示 “You are running composer with xdebug enabled”,先关掉 xdebug,否则会影响 HTTP 请求超时判断
- 部分企业网络会拦截 HTTPS 镜像,诊断时可能显示 SSL handshake failed,这时得换 HTTP 源(不推荐)或走代理
为什么改了源还是走官方?
根本原因通常是配置未生效或被覆盖。Composer 的源配置有优先级:项目级 > 全局级 > 默认,而且 composer.json 里的 repositories 字段会完全接管源行为,哪怕你全局配了镜像。
最容易被忽略的点:composer.json 中存在 "repositories": [{"type": "composer", "url": "https://packagist.org"}] —— 这个显式声明会清空所有镜像配置,强制回退到官方源。
- 检查
cat composer.json | grep -A 5 repositories,确认没有硬编码官方地址 - 临时禁用项目配置:加
--no-plugins --no-scripts参数运行composer config -l,排除插件干扰 - Windows 用户注意:全局配置文件在
%APPDATA%\Composer\config.json,别去改错位置
-v 参数跑一次 composer update -v,看日志里第一条 GET 请求发给了哪个域名。










