全局配置国内镜像最稳妥,执行composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/即可生效;注意Composer 2.x用repo.packagist、1.x用packagist,-g不可省略,URL末尾斜杠不能少。

composer config 全局设置国内镜像
直接改全局配置最稳妥,所有项目都生效,不用每个项目单独配。执行这条命令就能把默认源换成阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
注意 repo.packagist 是 Composer 2.x 的写法;如果是老版本(1.x),得用 packagist(不带 repo. 前缀)。错写成 packagist.org 或漏掉 -g 就只改当前目录,下次换项目就失效。
-
-g缺失 → 配置只在当前项目根目录的composer.json里生效 - 镜像地址末尾斜杠不能少,
https://mirrors.aliyun.com/composer(少斜杠)会 404 - 腾讯云、华为云镜像也行,但阿里云目前同步频率高、稳定性好,出问题概率低
临时切换镜像:install/update 时加 --repository-url
不想动全局配置,或者测试某个镜像是否可用,就用临时参数。它优先级最高,会覆盖全局和项目配置:
composer install --repository-url=https://packagist.phpcomposer.com
packagist.phpcomposer.com 已停用,现在基本只剩阿里云、腾讯云、华为云三家能用。用错地址会卡在 “Loading composer repositories”,等几十秒后报 Could not fetch https://xxx/packages.json。
- 临时参数只影响当次命令,适合 CI 脚本或排查网络问题
- 如果同时用了
composer.json里的repositories字段,临时参数仍会覆盖它 - 别在
require后面加这个参数——composer require foo/bar --repository-url=xxx不生效,必须用install或update
项目级配置:修改 composer.json 的 repositories 字段
团队协作时,想让所有人用同一镜像,就写进 composer.json。但要注意格式,否则 composer validate 通不过:
"repositories": [
{
"type": "composer",
"url": "https://mirrors.aliyun.com/composer/"
}
]
这个字段不是简单替换字符串,而是完整 JSON 数组。常见错误是漏掉外层方括号、URL 写成字符串没加引号、或者误加了 "packagist": false 导致连基础包都拉不到。
- 加了
"packagist": false后,必须自己补全 packagist 官方源(不推荐) - 如果项目已存在
repositories,别直接覆盖,要合并数组,否则丢掉私有包源 - PHP 7.2+ 和 Composer 2.2+ 对 JSON 格式更敏感,多一个逗号或少一个引号就报错
JSON decode error
验证镜像是否生效 & 清除缓存
改完配置别急着跑 install,先看实际请求走的是哪个源:
composer config repo.packagist
输出应该是 https://mirrors.aliyun.com/composer/。如果还是 https://packagist.org,说明没生效。这时候清缓存比重试更有用:
composer clear-cache
缓存不清理,Composer 可能继续用旧镜像的元数据,导致装包慢或版本不对。尤其在切换镜像后第一次运行 update,经常卡在 “Updating dependencies” 十几秒不动——大概率是缓存没清干净。
-
clear-cache不影响已安装的 vendor,安全 - Windows 用户注意:缓存路径在
%LOCALAPPDATA%\Composer\cache,手动删也行 - Mac/Linux 下
~/.composer/cache权限异常时,clear-cache可能失败,得chmod -R 755 ~/.composer/cache先修权限
镜像本身只是加速手段,真正卡住的往往是本地 PHP 扩展缺失(比如 openssl 或 zlib)、DNS 解析异常,或者公司防火墙拦截了 HTTPS 请求。这些情况即使换了镜像,也会在 “Resolving dependencies” 阶段卡住,得看具体错误信息再查。









