运行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 可永久切换全局镜像源,修改 ~/.composer/config.json;常见错误包括参数拼错(如 -global)、权限不足或误加多余路径;项目级配置需去掉 -g,仅影响当前项目且优先级高于全局。

composer config 命令改全局镜像源
直接运行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 就能永久切换到阿里云镜像。这个命令会修改你家目录下的 composer.json(通常是 ~/.composer/config.json),对所有项目生效。
常见错误现象:执行后没生效,多半是因为加了 --global 但拼错了(比如写成 -global),或者用户权限导致写入失败(尤其在 macOS 或 Linux 的 root 环境下误切了用户)。
- 务必用
-g(等价于--global),不能漏掉 - 路径中不要手动加
https://以外的协议或路径,比如别写成https://mirrors.aliyun.com/composer/packages.json - 如果提示 “Permission denied”,检查
~/.composer/所有者是否为你当前用户(ls -la ~/.composer)
项目级镜像配置(不污染全局)
进到某个项目根目录后,去掉 -g 参数,只运行 composer config repo.packagist composer https://mirrors.aliyun.com/composer/。它只改当前项目的 composer.json,适合需要混用源(比如私有包走内网源、公开包走淘宝镜像)的场景。
注意:这个操作会把镜像配置写进项目自己的 composer.json,提交到 Git 后其他人也会继承该设置——如果你不希望这样,得提前沟通或加到 .gitignore(但不推荐,因为镜像本应是协作一致的基础设施)。
- 项目配置优先级高于全局,冲突时以项目为准
- 执行后可检查
composer.json是否新增了"repositories"字段 - 如果项目已有自定义
repositories,这条命令会覆盖整个数组,不是追加
验证镜像是否生效
最简单的办法是执行 composer show -p | head -5 或直接 composer clear-cache && composer require monolog/monolog:2.0.0 --no-install,观察下载域名是不是 mirrors.aliyun.com。
更准的方式是看 Composer 的调试输出:composer install -vvv 2>&1 | grep "Downloading",里面出现的 URL 域名就是当前实际走的源。
- 别只看
composer config --list输出——它只显示配置项,不反映运行时真实请求地址 - 某些旧版 Composer(composer clear-cache
- 如果用了代理或公司网络策略,即使配置正确,也可能被中间设备重定向回 packagist.org
为什么不用 packagist.phpcomposer.com
那个域名早在 2022 年初就已停止维护,现在访问会 302 跳转到阿里云镜像,但跳转链路不稳定,且证书偶尔异常。硬编码它等于多了一层不可控的中间跳转,容易触发超时或 SSL 错误(比如 cURL error 60: SSL certificate problem)。
直接指向阿里云官方地址,省去跳转、兼容性更好,也避免某些 CI 环境因 DNS 缓存或防火墙拦截跳转而失败。
- 当前唯一推荐的稳定地址是
https://mirrors.aliyun.com/composer/ - 不要用带
/packages.json后缀的地址,Composer 会自动拼接 - 国内服务器部署时,建议加个简单健康检查脚本定期 curl 这个地址,确认镜像可用
composer diagnose 的输出,比反复改配置有用得多。











