用 composer config -g repos.packagist.org(2.2+)或 composer config -g repo.packagist(1.x)查看是否正确设置镜像源,返回空或官方 URL 说明未生效;阿里云镜像推荐命令为 composer config -g repositories.packagist.org '{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}',注意 JSON 格式与 HTTPS 协议。

怎么确认当前全局源设没设对
直接运行 composer config -g repos.packagist.org(Composer 2.2+)或 composer config -g repo.packagist(1.x / 兼容旧版),看输出是不是你期望的镜像 URL。如果报错或返回空,说明没设;如果返回 {"type": "composer", "url": "https://packagist.org"},说明还在走官方源。
别信 composer config -g mirror——这根本不是 Composer 官方配置项,是旧教程乱写的字段,执行了也完全不生效。
- 新版推荐用
repos.packagist.org,更规范,且能正确覆盖 packagist.org 的所有子域名请求 - 旧命令
repo.packagist在 Composer 2.x 仍兼容,但某些边缘场景(比如带自定义 metadata 的包)可能 fallback 失败 - Windows 用户注意:PowerShell 和 CMD 的环境变量不共享,改完记得新开终端再验证
一条命令设好阿里云全量镜像(最稳方案)
阿里云镜像目前同步最及时、HTTPS + HTTP/2 支持完整、域名稳定,推荐作为默认选择:
composer config -g repositories.packagist.org '{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}'
这条命令会写入 ~/.composer/config.json(Linux/macOS)或 C:\Users\用户名\AppData\Roaming\Composer\config.json(Windows),之后所有项目自动生效。
- URL 末尾不能多加
/packages.json,也不能漏掉https://,否则 Composer 解析失败,静默回退到官方源 - 必须带
{"type": "composer", "url": "..."}这种 JSON 字符串结构,不能只写 URL 字符串,否则报错Invalid repository type: composer - 如果之前用过
sudo composer config -g(Linux/macOS),很可能写进了 root 用户的 config.json,普通用户运行时读不到——检查whoami和ls -l ~/.composer/config.json
为什么换了源还是慢?常见失效原因
执行完命令后跑 composer require monolog/monolog 却发现下载地址仍是 packagist.org,大概率是下面几个地方卡住了:
- 当前目录下有
composer.json,且里面定义了"repositories"字段——项目级配置优先级高于全局,会直接覆盖 - 本地开了代理、公司防火墙拦截了
mirrors.aliyun.com,可以浏览器直接访问该 URL 测试连通性 - 缓存残留:旧的
packages.json元数据可能还记着国外源,执行composer clear-cache再试 - CI/CD 环境里用了
--repository临时参数但没加-vvv,根本看不出实际请求发去了哪,建议加-vvv看真实 URL 日志
怎么安全地切回官方源
想临时验证是否真由镜像加速,或者团队要求统一用官方源,就删掉全局镜像配置:
composer config -g --unset repositories.packagist.org
这条命令比手动编辑 config.json 更可靠,不会误删其他配置。删完后 composer config -g repositories.packagist.org 应该报错(表示已清空),再执行 composer diagnose 就能看到 Repo packagist.org: https://packagist.org。
注意:如果你之前在项目里也执行过 composer config repo.packagist ...,那只是改了 composer.json,删全局配置不影响它——得进项目目录再执行 composer config --unset repo.packagist 或手动删 repositories 段。
镜像这事看着简单,真正卡住人的永远是“以为设了,其实没生效”——多用 composer config -g 和 composer diagnose 看实锤,别靠猜。










