正确设置全局镜像源需执行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,缺一不可:-g 表示全局,repo.packagist 是唯一合法键名(非 repos),composer 是必需 type 值,url 必须 https 且末尾带 /。

直接执行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 就能生效,但漏掉任意一个关键要素——比如少个 /、写错键名、缺 composer 类型值——都会静默失败,且不报错。
为什么 composer config -g repos.packagist 不生效
因为 Composer 内部硬编码只识别 repo.packagist(单数 repo),不是复数 repos。写成 repos.packagist 后,配置会悄悄写进一个无效字段,composer config -g repo.packagist 查出来是空或 null,install/update 仍走官方源。
- 运行
composer config -g repo.packagist验证:正确输出应为类似{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 如果返回空、
null或报错,说明没写对,不是网络问题 - Windows 用户改完需重启终端才能读到新配置
composer config -g repo.packagist 必须带的三个参数
这条命令完整结构是:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,缺一不可:
-
-g:表示全局配置,影响所有项目;漏掉就只改当前目录的composer.json,换个项目就失效 -
repo.packagist:配置项 key,不能拼错、不能加s、不能大小写混用 -
composer:这是type值,不是可选参数,也不是注释;省略它,Composer 2.0+ 会 fallback 到默认源 -
https://mirrors.aliyun.com/composer/:URL 必须用 HTTPS,且末尾必须有/;少斜杠会导致请求路径拼成/composerpackages.json,直接 404
项目级配置比全局更可靠
全局看着省事,但实际协作中容易出问题:
- 某些项目在
composer.json里写了"repositories": {"packagist.org": false},会直接屏蔽全局设置 - CI 流水线里如果用户身份和全局配置用户不一致(比如宝塔后台以
www用户运行,但-g写的是root的配置),镜像就不生效 - 团队协作时,全局配置无法被 Git 跟踪,新人拉代码后行为不一致
推荐做法:进项目根目录,运行 composer config repo.packagist composer https://mirrors.aliyun.com/composer/(去掉 -g)。它会自动在 composer.json 顶层写入 "repositories" 字段,key 固定为 "packagist",不会覆盖已有私有源——只要原来 repositories 是对象(不是数组),命令就会安全合并。
临时切换镜像只对当次命令有效
不想动任何配置,又想验证某个镜像是否可用?用 --repository-url 参数:
- 只支持
install和update,require后加这个参数不生效 - 优先级最高,会完全忽略项目和全局的所有仓库配置
- 加上
-vvv才能看到真实请求地址,否则你根本不知道连了谁;例如:composer install -vvv --repository-url=https://mirrors.huaweicloud.com/repository/php/composer/ - 适合 CI 脚本或排查网络问题,用完即弃,不留痕迹
镜像地址写错(比如用了已停用的 packagist.phpcomposer.com)会导致卡在 Loading composer repositories 几十秒,然后报 Could not fetch https://xxx/packages.json。这种时候别猜,直接 -vvv 看日志里发出去的 URL 是什么。











