composer init前必须配置国内镜像源,否则会卡在“loading composer repositories”,因初始化需直连packagist.org拉取元数据且无fallback;正确命令为composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,输出须为{"type":"composer","url":"https://mirrors.aliyun.com/composer/"},并清缓存、删vendor与composer.lock后重装。

composer init 前必须配镜像,否则卡在 Loading composer repositories
不是网络慢,是 composer init 第一步就要拉取 packagist.org 的元数据索引,国内直连基本失败。它不会 fallback,也不会提示你换源,就停在那一行不动。
- 执行
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(注意末尾斜杠不能少) - 验证是否生效:
composer config -g repo.packagist输出必须是完整 JSON,形如{"type":"composer","url":"https://mirrors.aliyun.com/composer/"} - 别先跑
composer init再配——一旦失败,生成的composer.json里可能已写入无效源,后续 require 仍会卡住
create-project 走不了全局镜像?用 --repository-url 强制指定
composer create-project 默认忽略全局配置,优先读目标模板(如 laravel/laravel)自带的 repositories 字段。哪怕你全局配好了,它照样直连 packagist.org。
- 临时救急:加参数
--repository-url=https://mirrors.aliyun.com/composer/,例如composer create-project laravel/laravel myapp --repository-url=https://mirrors.aliyun.com/composer/ - 初始化后进项目目录,检查
composer.json里是否有"repositories"块——有就删掉,再跑composer install - 若项目依赖私有包,删前确认该字段只包含官方源声明,避免误删必需的私有仓库配置
配完镜像还是慢?检查缓存、PHP 扩展和用户权限
镜像只加速下载,不解决底层连接或计算瓶颈。常见硬伤不在源本身。
- 确保 PHP 启用了
openssl和zlib:php -m | grep -E 'openssl|zlib'必须有输出,否则 HTTPS 请求根本建不起来 - 启用本地缓存:
composer config -g cache-files-dir ~/.composer/cache/files,否则每次都是裸请求 - 宝塔、Jenkins、Docker 中执行命令的用户 ≠ 你当前登录用户;用
whoami确认身份,再以对应用户执行sudo -u www composer config -g ...
项目级镜像配置容易踩坑的三个细节
项目级配置优先级高于全局,但格式极敏感,错一个字符就失效。
-
"repositories"必须是数组,不能是对象;正确写法:"repositories": [{"type":"composer","url":"https://mirrors.aliyun.com/composer/"},{"packagist.org": false}] -
{"packagist.org": false}是独立项,和镜像对象并列,不能嵌套在镜像对象内部 - 删掉
vendor/和composer.lock再运行composer install;update会复用旧 lock 文件里的 dist URL,导致仍走国外源
composer require monolog/monolog -vvv 2>&1 | grep "GET\|Downloading" 显示的域名确实是 mirrors.aliyun.com。很多人只看 config -g 输出就以为搞定了,结果后续操作还在暗中连国外。











