永久修改 Composer 全局镜像源只需执行 composer config -g repo.packagist https://mirrors.aliyun.com/composer/,该命令更新 ~/.composer/config.json 中的 repositories 配置,使所有命令(如 create-project、require)默认使用国内镜像;注意项目级配置优先级更高,需检查或清理项目中 repositories 设置。

直接改全局配置就行,不需要动每个项目的 composer.json,也不用每次加 --repository 参数。
怎么永久修改 Composer 全局镜像源
Composer 的全局配置文件是用户目录下的 composer.json(不是项目里的),它控制所有命令的默认行为。改这里,新项目、create-project、require 全部生效。
执行这条命令就能写入国内镜像(以阿里云为例):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
这个命令会自动更新你家目录下 ~/.composer/config.json 里的 repositories 配置。
- 用
-g表示 global,不加就是当前项目级 - 必须写
repo.packagist这个 key,这是 Composer 识别“主包源”的固定字段 - URL 末尾不能带斜杠(虽然有些镜像容忍,但部分版本会报
Invalid repository type) - 如果之前设过其他镜像,这条命令会覆盖,不是追加
为什么有时候改了还不走镜像?
常见原因是项目级配置优先级更高——如果当前目录有 composer.json,且里面写了 repositories,那它会屏蔽全局设置。
检查方法很简单:
composer config repo.packagist
如果输出一个 URL,说明项目级生效了;如果提示 Key "repo.packagist" does not exist,才轮到全局。
- 临时绕过项目级配置:加
-n参数强制不读项目配置,比如composer install -n - 彻底清理项目级镜像:运行
composer config --unset repositories - 某些老项目用了
packagist.org显式声明,得手动删掉"packagist": false这类禁用项
不同镜像源的可用性与细节差异
国内主流镜像基本都同步 packagist.org,但更新延迟和 HTTPS 支持程度略有区别:
- 阿里云(
https://mirrors.aliyun.com/composer/):稳定,延迟低,支持 HTTPS,推荐首选 - 腾讯云(
https://mirrors.cloud.tencent.com/composer/):同样可靠,部分地区 DNS 解析更快 - 华为云(
https://mirrors.huaweicloud.com/repository/php/):路径不同,注意末尾是/repository/php/,不是/composer/ - 清华源已停止服务,别再用
https://packagist.phpcomposer.com这类失效地址
换源时建议先试 ping 或 curl -I 看 HTTP 状态码,避免配置了个 404 地址白忙活。
CI/CD 或 Docker 环境里要注意什么
这类环境通常没用户家目录,composer config -g 写的配置不会持久化,每次容器重启就丢。
- Dockerfile 里应该用
RUN composer config -g repo.packagist ...放在安装依赖前 - GitHub Actions 中,
php-actions/composer这类 action 默认不继承全局配置,得显式传args: config -g ... - 某些 CI 平台(如 GitLab Runner)以 root 用户跑,全局配置实际写在
/root/.composer/config.json,不是/home/git/.composer/
最稳妥的做法:在自动化流程开头加一行 composer config -g repo.packagist ...,别依赖“已经配好”。
镜像源本身只是 URL 替换,但 Composer 对它的校验很严格——少个点、多斜杠、协议写错,都会静默回退到官方源,还可能卡在 Loading composer repositories 不报错。改完务必用 composer show -p 或装个包验证是否真走了镜像。










