Composer设多个镜像需手动调整repositories数组顺序来控制优先级,项目级配置用composer config repositories.xxx,全局配置必须加-g参数指定repos.packagist。

composer config 命令怎么设多个镜像且控制优先级
Composer 本身不支持「镜像优先级」这个概念——它只认一个 repositories 列表,按顺序查,第一个匹配就用,后面全跳过。所谓“优先级”,其实是靠手动调整 repositories 数组里源的排列顺序实现的。
常见错误是以为加了 packagist.org 和阿里云镜像就能自动 fallback,结果一断网就报错:Could not fetch https://packagist.org/packages.json,因为默认配置里 packagist.org 在最前面,而镜像没被启用。
- 全局配置多个源,必须用
composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/覆盖默认源(注意 key 是repos.packagist,不是repo或repository) - 项目级配置多个源(比如私有包 + 镜像),用
composer config repositories.my-private composer https://pkg.example.com,再把阿里云镜像设为repos.packagist;顺序上,自定义源写在前,repos.packagist写在最后——这样私有包先查,没命中才走镜像 - 千万别在
repositories里同时写packagist.org和镜像,否则 Composer 会尝试连原站,失败即中断,镜像根本不会生效
为什么 vendor/autoload.php 加载失败常和镜像配置有关
这不是镜像本身的问题,而是镜像配置错误导致依赖没装全、版本冲突或跳过了 require-dev 的包,最终 autoload.php 缺关键类或命名空间映射。
典型场景:你用 composer create-project laravel/laravel 初始化项目,但全局镜像没生效,结果拉下来的是旧版 Laravel,其 vendor/autoload.php 依赖的 symfony/polyfill 版本不匹配,运行时报 Class not found。
- 检查是否真用了镜像:运行
composer config -g repos.packagist,输出应是镜像地址,不是{"type": "composer", "url": "https://packagist.org"} - 删掉
vendor和composer.lock,再跑composer install——镜像只影响下载行为,不影响 lock 文件内容;如果 lock 里记的是 packagist.org 的 hash,换镜像也没用 - 国内网络下,
composer install --no-plugins --no-scripts可绕过某些因 autoload 未就绪导致的插件加载失败,方便定位是不是镜像引发的链式问题
阿里云 / 华为云镜像 URL 怎么选,有什么区别
URL 差异直接影响能否成功解析元数据,不是随便粘贴就能用。阿里云有两个常用地址:https://mirrors.aliyun.com/composer/(稳定,同步延迟约 5 分钟)和 https://packagist.phpcomposer.com(已停用,2023 年起返回 404);华为云是 https://mirrors.huaweicloud.com/repository/php/,注意末尾斜杠不能少。
容易踩的坑是复制了带中文说明的教程链接,比如 https://mirrors.aliyun.com/composer/#readme,结果 composer config 把 #readme 当作 URL 一部分,后续所有请求都 404。
- 务必用纯路径形式:
https://mirrors.aliyun.com/composer/(结尾斜杠必须有) - 华为云镜像对某些私有包兼容性略差,如果项目里用了
type: package自定义源,建议优先选阿里云 - 腾讯云镜像(
https://mirrors.cloud.tencent.com/composer/)在国内部分地区 DNS 解析不稳定,遇到curl error 6可临时切回阿里云
composer global require 为啥不走镜像配置
因为 global 命令读的是全局配置(COMPOSER_HOME/config.json),但很多人只配了当前项目的 composer.json,或者用 composer config repos.xxx 没加 -g 参数,导致全局安装时仍直连 packagist.org。
现象是:项目里 composer require foo/bar 很快,但 composer global require larastan/larastan 卡住十几秒后报 timeout。
- 确认全局镜像是否生效:
composer config -g repos.packagist,不是composer config repos.packagist - 全局配置文件路径通常是
~/.composer/config.json(Linux/macOS)或%APPDATA%\Composer\config.json(Windows),直接编辑也行,但记得用双引号包裹 URL - 如果公司内网禁了外部 HTTPS,全局工具又必须用,可临时加
--repository=https://mirrors.aliyun.com/composer/参数,但每次都要写,不如配好-g
镜像配置真正生效的前提,是你清楚自己改的是哪个作用域的配置——项目、用户还是系统级;漏掉 -g 是最常被忽略的一环。










