composer config -g repo.packagist 命令没生效是因为三个条件任一缺失:必须带-g参数、键名严格为单数repo.packagist、URL后必须带/且中间显式写composer类型;任一不符即静默回退官方源,验证需输出完整JSON对象。

composer config -g repo.packagist 命令为什么没生效
不是命令写错了,而是三个关键点中任意一个没对上,就会静默失败——不报错、不提示,但 composer install 依然卡在 Downloading 或连 packagist.org。
必须同时满足:
-
-g参数不能漏:漏掉就只改当前项目,不是全局 - 键名必须是
repo.packagist(单数,repos.packagist或packagist.org都无效) - URL 后必须带
/,且中间要显式写composer类型,即完整形如:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
验证是否成功:运行 composer config -g repo.packagist,输出应为一个 JSON 对象,含 "type": "composer" 和正确 url;如果输出 null 或空,说明配置根本没写进去。
项目级镜像配置怎么安全追加,不覆盖私有源
团队协作时,把镜像写进 composer.json 更可控,但直接手写 repositories 数组容易出错——尤其当项目已定义私有仓库时,一覆盖就丢包。
推荐用 composer config 命令自动合并:
- 确保你在项目根目录下,且
composer.json中repositories是对象(如"repositories": {})或未定义,命令才能安全插入"packagist"键 - 执行:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(注意不带-g) - 它会生成类似:
"repositories": { "packagist": { "type": "composer", "url": "https://mirrors.aliyun.com/composer/" } }
如果原 repositories 是数组(比如已有私有源),这条命令会失败。此时得手动编辑,把新源作为数组第一项,避免 fallback 到官方源。
composer create-project 还是慢?它不读全局镜像
composer create-project 默认绕过 repo.packagist 配置,直连 packagist.org 下载 skeleton,所以换全局镜像后它依然卡。
必须显式指定源:
- 用
-r参数:composer create-project laravel/laravel myapp -r https://mirrors.aliyun.com/composer/ - 注意:
-r是短参数,不是--repository-url(后者在部分版本不识别) - 该参数只影响本次命令,不影响后续
composer install,所以仍需配好全局或项目级镜像
某些 starter 模板内部还含 Git 克隆(如 git@github.com:),镜像对此无加速作用,得另配 SSH 代理或换国内 fork。
换源后仍卡在 Loading composer repositories
这不是镜像地址问题,而是本地环境干扰了请求链路:
- 检查代理残留:
env | grep -i proxy,若有http_proxy或https_proxy,临时unset http_proxy https_proxy再试 - DNS 污染:运行
ping mirrors.aliyun.com,若 IP 异常,换 DNS(如114.114.114.114) - SSL 校验失败:企业网络可能拦截 HTTPS,临时禁用(仅调试):
composer config -g secure-http false,完事后务必恢复 - 缓存污染:执行
composer clear-cache,否则旧索引仍指向失效路径
最易被忽略的是:某些 CI 环境(如 GitHub Actions)默认不加载全局配置,得靠 COMPOSER_REPO_PACKAGIST=https://mirrors.aliyun.com/composer/ composer install 显式传入。


















