composer config -g repo.packagist 配置失效的根本原因是键名(必须单数repo.packagist)、type值(必须显式写composer)、url(必须https且末尾带/)三者任一不满足即静默回退官方源,验证需输出完整json对象。

composer config -g repo.packagist 输出为空或仍是 packagist.org
这不是网络问题,是配置根本没写进去。Composer 对键名、type 值、URL 格式三者都做硬校验,错一个就静默忽略,不报错也不提示。
-
repo.packagist必须是单数,写成repos.packagist或repositories.packagist.org全无效 - 中间参数
composer是type值,不是说明文字,漏掉整条配置被丢弃 -
url必须以https://开头,且末尾带/——https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(少斜杠会导致请求路径拼成/composerpackages.json,404) - 必须加
-g,否则只改当前项目目录下的composer.json,换目录即失效
验证方式只有一条:composer config -g repo.packagist。输出应为完整 JSON,如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"};空、null、或仍含 packagist.org,说明配置失败。
composer install -vvv 日志里仍出现 packagist.org 或 codeload.github.com
日志里看到 Downloading https://api.packagist.org/ 或 https://codeload.github.com/,说明请求压根没发到你配的镜像——不是镜像慢,是根本没走过去。
- 项目级
composer.json里存在"repositories"字段(哪怕值是{}或[]),就会无条件屏蔽全局配置 - 执行
composer config repo.packagist(不加-g)看输出,有内容就说明项目级已覆盖 -
composer clear-cache必须做,否则 Composer 仍按缓存里的旧元数据发起请求,反复尝试从packagist.org校验 - 删掉
vendor/和composer.lock再跑composer install --no-cache,否则composer.lock里记录的dist.url还是原始 GitHub 地址
curl -I 测试镜像根路径返回 404 或超时
composer diagnose 不发网络请求,显示 OK ≠ 镜像可用。真实验证只能靠 curl 直打地址。
- 运行
curl -I https://mirrors.aliyun.com/composer/packages.json,必须返回HTTP/2 200或HTTP/1.1 200 OK - 返回
HTTP/2 404:大概率 URL 缺后缀,比如华为云正确地址是https://mirrors.huaweicloud.com/repository/php/,不是/composer/ - 超时或
Could not resolve host:DNS 污染或本地网络层问题,和 Composer 无关;可试curl --resolve mirrors.aliyun.com:443:223.5.5.5 https://mirrors.aliyun.com/composer/packages.json -I绕过 DNS - 返回 HTML 页面(非 JSON):某些镜像(如清华源)公网访问会触发人机验证,生产环境建议换阿里云或腾讯云
CI/CD 或宝塔面板里镜像始终不生效
这类环境默认不继承你的本地全局配置,且 PHP 进程用户常与配置用户不一致。
- GitHub Actions 等 CI 流水线中,必须在 workflow 步骤里显式执行两条命令:
composer config -g repositories.packagist.org.type composer和composer config -g repositories.packagist.org.url https://mirrors.aliyun.com/composer/ - 宝塔面板中,PHP CLI 默认禁用
putenv、proc_open、pcntl_signal,Composer 启动即崩溃,根本走不到镜像环节;需进「PHP 管理」→「禁用函数」页签中删除这三项 - Vagrant 或 Docker 中,
~/.composer/config.json可能挂载失败或权限不对;更可靠做法是项目级配置:composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加-g),写入composer.json后可提交 Git
最易被忽略的是缓存残留和锁文件绑定旧 dist URL,这两项不做,换再快的镜像也白搭。











