Hyperf项目安装慢或卡在Resolving dependencies,根本原因不是网络问题,而是Composer镜像配置错误:必须用composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,且键名(repo.packagist)、type值(composer)、URL末尾斜杠(/)三要素缺一不可,否则静默失效;验证需输出完整JSON;项目级配置须在composer.json的repositories数组首位显式禁用packagist.org并清缓存重装。

Hyperf 项目安装慢、卡在 Resolving dependencies、甚至静默回退到 packagist.org——根本不是网络问题,而是 Composer 镜像没配对或没生效。配错一个字符、少个斜杠、写错键名,就等于没配。
composer config -g repo.packagist 命令必须三要素齐全
全局换源最快,但错一个就白忙:不是报错,是完全忽略。
-
repo.packagist是唯一合法键名——写成repos.packagist(多 s)、mirror、Repo.Packagist(大小写混用)全无效 -
composer是强制type值——不能省略,也不能写成vcs、package或空字符串 - 镜像 URL 必须以
/结尾——https://mirrors.aliyun.com/composer❌(会拼出/composerpackages.json导致 404),https://mirrors.aliyun.com/composer/✅
正确执行: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/"}。如果为空、null 或报错,说明没写对。
Hyperf 项目级镜像必须写进 composer.json 的 repositories 数组首位
项目级配置更可靠,尤其在 CI/CD 或多用户环境里,但结构容错极低。
- 必须放在项目根目录的
composer.json中,写进composer.lock或全局config.json无效 -
repositories必须是数组([]),不能是对象({});阿里云镜像对象必须是数组第一个元素 - 必须显式禁用官方源:
{"packagist.org": false}是独立对象,要和镜像对象并列放在repositories数组里,不能嵌套、不能合并 - 改完后必须删掉
vendor和composer.lock,再跑composer install——否则旧 lock 文件里的 hash 可能和镜像元数据不匹配,导致依赖解析失败
Hyperf 安装时别跳过 --no-scripts,也别乱 require
Hyperf 不是普通包,骨架生成阶段的脚本决定了 DI 容器、代理类、注解扫描能不能工作。
- 必须用
composer create-project hyperf/hyperf-skeleton:3.1.25 my-app(查 GitHub Releases 锁死 patch 版)——直接composer require hyperf/http-server会导致类找不到、@Inject失效、启动崩溃 - 禁止加
--no-scripts:它会跳过HyperfDevtoolComposerScriptHandler::build,结果runtime/container目录为空,容器根本建不起来 - HTTP/Redis/MySQL 等组件必须用官方协程适配版:
hyperf/http-client、hyperf/redis、hyperf/database,别require guzzlehttp/guzzle或predis/predis——它们会阻塞协程调度
临时验证镜像是否真生效,用 --repository-url + -vvv
怀疑镜像没走?别猜,直接看请求地址。
- 命令优先级最高,覆盖全局和项目配置:
composer install -vvv --repository-url=https://mirrors.huaweicloud.com/repository/php/composer/ -
-vvv是关键——它会打印真实请求,比如看到GET https://mirrors.huaweicloud.com/repository/php/composer/p2/monolog/monolog.json才算真正走镜像 - 只对
install、update、require生效(注意:是composer require foo/bar前加参数,不是require后加)
Hyperf 的依赖管理链条比 Laravel 严得多:镜像配置、骨架创建、组件选型、自动加载优化,环环相扣。漏掉任意一环,轻则安装慢,重则运行时崩溃——而且错误往往不报在镜像上,而是藏在容器构建或注解扫描阶段。


















