composer镜像配置必须同时满足三要素才生效:键名严格为单数repo.packagist、第二参数显式写composer(type值)、url须https且末尾带/;任一缺失即静默回退官方源,验证需执行composer config -g repo.packagist输出完整json。

composer config -g repo.packagist 命令必须写对这三处
配了还是走 packagist.org,大概率不是网络问题,是命令漏掉关键要素。Composer 2.x+ 只认 repo.packagist 这个 exact 键名,且必须带齐三个参数:
-
-g:表示全局配置,写进~/.composer/config.json,影响所有项目 -
repo.packagist:注意是单数repo,不是repos.packagist;全小写,不能大小写混用 -
composer:这是type值,不是可选注释,漏掉它会静默 fallback 到官方源 -
https://mirrors.aliyun.com/composer/:URL 必须 HTTPS,且末尾必须有/,少一个斜杠就会拼成/composerpackages.json导致 404
正确命令只有一条:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
验证是否真的生效
别只看命令有没有报错,要确认配置已写入且被 Composer 读取:
- 运行
composer config -g repo.packagist,输出应为{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}或至少是完整 URL 字符串 - 如果输出为空、
null或仍是https://repo.packagist.org,说明根本没写进去,重跑上一步命令 - 执行
composer diagnose,检查 “Checking composer.json” 和 “Checking HTTP connection to packagist.org” 两行——后者应显示连接到你的镜像地址(如mirrors.aliyun.com),而不是packagist.org
连通性卡在 “Loading composer repositories” 怎么排查
换源后仍卡住,不是镜像没生效,而是本地环境干扰或元数据残留:
- 先清缓存:
composer clear-cache,旧缓存可能含损坏的索引或过期重定向 - 检查代理残留:
env | grep -i proxy,Composer 不自动绕过系统代理,即使镜像在国内也会被转发出去 - DNS 污染:运行
ping mirrors.aliyun.com,若解析到非阿里云 IP(比如 114.114.x.x),换 DNS(如114.114.114.114)再试 - SSL 校验失败:企业网络拦截 HTTPS 时,临时禁用(仅调试):
composer config -g secure-http false,验证后务必恢复
为什么 composer create-project 还是慢
这个命令不读 repo.packagist 全局配置,它会绕过去直接请求 packagist.org 下载 skeleton。
- 必须显式加
--repository-url参数:composer create-project laravel/laravel myapp --repository-url=https://mirrors.aliyun.com/composer/ - 注意是
--repository-url(带连字符和 url 后缀),不是--repository(后者用于其他场景) - 某些 starter 模板含 Git 克隆步骤,镜像只加速包下载,Git 部分需另配代理或使用国内 fork
镜像同步有延迟,新发布的包通常 5–10 分钟后才可见;如果刚发布就搜不到,等一会儿再试,别急着切回官方源。











