结论:必须先配置中文镜像再执行composer init,否则init中添加依赖或后续install会因直连packagist.org超时卡死;镜像命令必须为composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,四要素缺一不可。

直接说结论:composer init 和中文镜像是两件事,必须分开做、且顺序不能错——先配镜像,再 init;否则 init 过程中下载依赖(比如你选了 require)会卡死或超时,不是命令问题,是源没换。
composer init 前不设镜像,交互式添加依赖会失败
很多人在运行 composer init 时选了 “yes” 添加依赖,结果卡在 guzzlehttp/guzzle 下载环节,光标不动、无报错、等十分钟也没反应。这不是网络波动,是 composer 默认走 https://packagist.org,国内直连基本不可用。
- 即使你只填基本信息、不加任何
require,后续第一次composer install也会触发下载(比如composer/installers这类隐式依赖),照样卡 -
composer init本身不联网,但它的交互流程里「Add package」步骤会当场尝试 fetch 包信息——这时就依赖镜像生效 - 验证是否生效:运行
composer config -g repo.packagist,输出应含"url": "https://mirrors.aliyun.com/composer/",不是空或null
中文镜像配置命令必须写全,少一个字符就静默失效
常见错误是复制网上教程漏掉关键部分,比如:composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/ —— 这条命令根本没用,因为键名写成了复数 repos,而 Composer 只认单数 repo.packagist。
- 正确命令只有这一种写法:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 四个要素缺一不可:
-g(全局)、repo.packagist(固定 key)、composer(type 值,不是注释)、URL 必须 HTTPS 且末尾带/ - Windows 用户改完要重启终端;Linux/macOS 用户若用宝塔或 Docker,确保执行命令的用户和后续运行
composer install的用户一致
init 后必须立刻跑 composer install,否则 autoload.php 不生成
composer init 只生成 composer.json,不创建 vendor/ 目录,也不生成 vendor/autoload.php。哪怕你一个依赖都没加,这个文件也不存在——所以 require 'vendor/autoload.php' 会直接报错 failed to open stream。
- 不管有没有
require字段,都得手动执行一次composer install - 如果
composer.json里有"type": "project"(推荐),install会自动创建vendor/和autoload.php - 如果 init 时跳过了 autoload 配置,
install虽然成功,但new MyClass()仍会报Class not found——这和镜像无关,是 autoloading 没配
包名格式错误会导致 validate 失败,CI 直接挂掉
交互式 composer init 第一步填 Package name,很多人输 myblog 或 MyBlog,看着能过,但后续 composer validate 报错,CI 流水线第一步就终止。
- 合法格式严格限定为
vendor/name:全小写、字母数字/连字符/下划线、以字母开头、且仅含一个/ - 常见非法示例:
my_app(下划线开头)、MyBlog(大写)、my blog(空格)、project_v2(下划线结尾) - Git 用户名含中文或空格时,
init可能自动读取并生成非法名,建议非交互模式强制指定:composer init --no-interaction --name="acme/myapp"
最容易被忽略的是:镜像配置成功 ≠ 所有命令都走镜像。某些私有仓库或 repositories 字段会覆盖全局设置,团队项目建议用项目级配置(composer config repo.packagist ...)而非 -g,避免新人拉代码后行为不一致。











