composer config -g repo.packagist 命令不生效主因是三处拼写错误:缺 -g、键名误为 repos.packagist、url 末尾少 /;正确格式为 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,且需验证输出为完整 json。

composer config -g repo.packagist 命令为什么总不生效
不是镜像地址失效,而是命令写错一个字符就静默回退 packagist.org——Hyperf 安装卡在 downloading hyperf/cache v3.1.0 或 Loading composer repositories,90% 是因为这三处写错:-g 缺失、键名写成 repos.packagist(多了一个 s)、URL 少了末尾 /。
正确写法必须是:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/-
repo.packagist是唯一合法键名,大小写敏感,不能拼错 -
composer是强制 type 值,不能省略或写成vcs - URL 必须以
/结尾,否则会拼出/composerpackages.json导致 404
验证是否写入成功:运行 composer config -g repo.packagist,输出必须是完整 JSON,例如 {"type":"composer","url":"https://mirrors.aliyun.com/composer/"}。如果为空、null 或报错,说明没生效。
Hyperf 项目已有 composer.lock 时怎么让镜像真正起作用
换了镜像但安装仍慢?根本原因是 composer.lock 里存着旧的 dist URL,Composer 会优先尝试那个地址,失败后 fallback 不稳定,甚至直接超时。
必须做三件事:
- 删掉
vendor/和composer.lock - 执行
composer update --lock(不是install),强制重写 lock 文件中所有包的dist.url - 检查任意一个
hyperf/xxx包的dist.url字段,应为类似https://mirrors.aliyun.com/composer/dists/...
新项目建议直接用 composer create-project hyperf/hyperf-skeleton:3.1.25 my-app --repository=https://mirrors.aliyun.com/composer/,跳过全局配置依赖,更可控。
Hyperf 启动慢和 Composer 镜像没关系
镜像只加速 composer install 阶段下载,而 Hyperf 真正卡在启动就绪——vendor/autoload.php 加载耗时 280–650ms、OPcache 未预热、Swoole Server 冷启动才是瓶颈。
构建阶段必须加这些参数:
-
composer install --no-dev --prefer-dist --optimize-autoloader:去掉 dev 工具,用压缩包而非 Git 克隆,生成优化 autoload - 单独跑
composer dump-autoload --optimize --classmap-authoritative:验证方式是grep "classMap =" vendor/autoload.php应有非空数组 - Docker 构建时预热 OPcache,例如在
ENTRYPOINT前执行php -d opcache.enable=1 -d opcache.preload=/app/preload.php -f bin/hyperf.php start
镜像再快,也救不了 autoload.php 里几万行 require 和 class_exists 判断。
代理环境下 HTTPS 镜像必须配双 proxy
公司内网或 CI 环境下,只设 http-proxy 会导致 Loading composer repositories 卡死无报错——Packagist 全量走 HTTPS,而 Composer 对代理协议严格分离。
必须同时配置:
composer config -g http-proxy http://127.0.0.1:8080composer config -g https-proxy http://127.0.0.1:8080
注意:https-proxy 的值仍要以 http:// 开头;密码含 @ 或 / 时必须 URL 编码,例如 pa@ss/word → pa%40ss%2Fword,否则解析截断导致认证失败。











