输出为空或报错说明配置未写入,因键名必须为repo.packagist(单数)、type值必须显式传composer、url须以/结尾且https,任一错误均被composer静默忽略。

直接执行 composer config -g repo.packagist,输出必须是形如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} 的完整 JSON 对象——否则配置没写进去,只是“看起来像配好了”。
为什么 composer config -g repo.packagist 输出为空或报错?
这不是网络问题,是键名、格式或权限写错了:
-
repo.packagist不能写成repos.packagist(多一个 s)、repositories.packagist.org(旧写法)或packagist.org(缺前缀) - 必须显式传
composer作为type值,漏掉就静默忽略:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - URL 必须以
/结尾,https://mirrors.aliyun.com/composer会拼出错误路径导致 404 - PowerShell 下 URL 要加引号:
composer config -g "repo.packagist" composer "https://mirrors.aliyun.com/composer/" - 在 CI 或宝塔里,你用
root配的,但实际跑命令的是www-data或runner用户,得切用户查:sudo -u www-data composer config -g repo.packagist
配置“存在” ≠ 请求“走镜像”
全局配置只是写进文件,真正发请求时可能被绕过:
- 项目根目录下
composer.json有"repositories"字段(哪怕空数组{}),就会无条件屏蔽全局配置 - 运行
composer config repositories查看当前生效的源,若输出含"url": "https://packagist.org",说明被覆盖了 - 临时禁用项目级配置验证:
composer config --unset repositories(不带-g),再跑composer install -vvv - 加
-vvv后过滤真实请求:composer install -vvv 2>&1 | grep "Downloading",只认mirrors.aliyun.com或mirrors.tuna.tsinghua.edu.cn这类域名 - 注意:日志里第一行
Downloading https://...是关键,它对应packages.json请求——这一步没走镜像,后面全白搭
镜像地址能访问,不代表 Composer 能用
Composer 不会告诉你 DNS 解析失败、TLS 握手超时或 404,而是静默 fallback 到官方源:
- 用
curl -I https://mirrors.aliyun.com/composer/packages.json测试,必须返回HTTP/2 200或HTTP/1.1 200 OK - 返回
404?大概率是 URL 少了末尾/;返回Could not resolve host?检查 DNS 或/etc/hosts - 卡住几秒后失败?可能是 OpenSSL 版本太旧,不支持 SNI,或本地代理策略拦截了 HTTPS 请求
- 浏览器访问不可靠——很多镜像根据
User-Agent拒绝非 Composer 请求,要用:curl -H "User-Agent: Composer/2.9.6" https://mirrors.aliyun.com/composer/packages.json
最容易被忽略的点:composer.lock 文件固化的是旧源的 dist URL 和 hash,换镜像后不删它,composer install 仍会尝试从官方源下载包,导致校验失败或 404。必须先 rm -rf vendor composer.lock,再执行 composer install(不是 update)。











