直接执行composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/即可全局生效,但必须严格满足三要素:带-g参数、键名repo.packagist(单数)、URL以/结尾且为HTTPS;缺一即静默失效,仍连packagist.org。

直接执行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 就能全局生效,但漏掉任何一环——比如斜杠、-g、键名拼写或权限问题——都会导致静默失效,最终还是连 packagist.org。
执行命令前必须确认 PHP 和 Composer 已正确安装
macOS 12+ 不再预装 PHP,系统自带的 /usr/bin/php 版本太低(通常 ≤7.3),且缺少 OpenSSL 扩展,Composer 根本跑不起来。
- 运行
php -v,输出必须 ≥7.4;若报command not found: php,先用brew install php - 运行
which php,应返回/opt/homebrew/bin/php(M1/M2)或/usr/local/bin/php(Intel);若为空,把export PATH="/opt/homebrew/bin:$PATH"加进~/.zshrc并执行source ~/.zshrc - 别用
brew install composer——该包自 2023 年起已被弃用,在 Apple Silicon 上常出Permission denied或Connection timed out - 改用官方脚本:
curl -sS https://getcomposer.org/installer | php,然后sudo mv composer.phar /opt/homebrew/bin/composer(M1/M2)并sudo chmod +x /opt/homebrew/bin/composer - 新开终端,运行
composer --version和which composer双验证,路径不能是./composer或用户目录下的绝对路径
配置镜像时三个硬性条件缺一不可
这条命令不是“试试看”,而是严格按格式执行才写入成功:
- 必须带
-g参数,否则只改当前项目,还会污染composer.json的repositories字段 - 键名必须是
repo.packagist(不是repos.packagist,也不是packagist.org;多一个s或少一个o都无效) - URL 必须为
https://mirrors.aliyun.com/composer/,末尾的/不能省——漏掉会导致部分 Composer 2.2+ 版本请求packages.json时 404,然后自动 fallback 到官方源,你完全感知不到 - 不要加
--disable-tls或http://,阿里云镜像只支持 HTTPS,且证书有效 - 别用
sudo composer config -g,否则配置写进 root 用户的~/.composer/config.json,普通用户运行时读不到
为什么 composer install 还在连 packagist.org?
不是镜像没配好,而是 Composer 的优先级规则被忽略了:
- 优先级顺序固定:项目
composer.json里的repositories> 全局~/.composer/config.json> 默认源 - 进项目根目录,运行
composer config --list | grep repositories,有输出就说明项目级配置已生效,覆盖了全局 - 打开
composer.json,搜索"repositories"——哪怕只有"repositories": {}或"packagist.org": false,也会彻底屏蔽全局镜像 -
composer.lock文件里硬编码了原始包地址,旧 lock 会绕过镜像;删掉vendor/和composer.lock再跑composer install - 全局 require(如
composer global require larastan/larastan)走的是~/.composer/composer.json的配置,需单独进该目录运行composer config repo.packagist composer https://mirrors.aliyun.com/composer/
验证是否真在用阿里云镜像
不能只看速度变快,要查实际生效的配置和网络请求:
- 运行
composer config -g repo.packagist.url,输出必须是https://mirrors.aliyun.com/composer/;若为空或报错,说明配置根本没写进去 - 运行
composer diagnose,看 “Repo” 行是否显示阿里云地址;若仍是https://packagist.org,说明被项目级配置覆盖 - 新建空目录,执行
composer init -n && composer require monolog/monolog --no-install -vvv 2>&1 | grep "GET https",看到GET https://mirrors.aliyun.com/composer/packages.json才算真正走镜像 - 如果出现
Could not resolve host: mirrors.aliyun.com,不是镜像问题,是 DNS、公司代理或防火墙拦截,需换网络环境或配~/.curlrc
最常被忽略的点:宝塔、CI 脚本、PHP 管理器中执行 composer 命令的用户往往不是你本人(比如是 www 或 jenkins),composer config -g 必须用对应用户身份执行,否则配置写错位置。临时调试可用 composer install -vvv --repository-url=https://mirrors.aliyun.com/composer/ 绕过所有配置层。


















