华为云composer镜像配置必须精确:composer config -g repo.packagist composer https://mirrors.huaweicloud.com/repository/php/composer/,三要素缺一不可——键名是repo.packagist(非repos)、type值为composer、url须完整且以/结尾;项目级配置优先级更高,应写入composer.json的repositories.packagist字段。

composer config -g repo.packagist 命令必须写对
华为云镜像不会自动生效,必须用精确的命令写入全局配置,错一个字符就白配。核心是三个关键点:repo.packagist(不是 repos.packagist)、composer(type 字段值,不能省)、URL 必须完整且带末尾斜杠。
-
composer config -g repo.packagist composer https://mirrors.huaweicloud.com/repository/php/composer/✅ 正确(注意路径是/repository/php/composer/,不是/composer/) - 如果写成
repos.packagist(多一个 s),Composer 完全忽略,不报错也不提示 - 如果 URL 少了最后的
/,部分 Composer 版本会 404;用http://会被secure-http拦截,必须用https:// - 验证是否生效:运行
composer config -g repo.packagist,应输出完整 JSON 对象,不是空或报错
项目级配置比全局更可控
团队协作或混合环境(比如本地开发用阿里云、CI 流水线跑在华为云 ECS 上)时,全局配置反而容易引发不一致。直接改 composer.json 更安全,且能确保 composer.lock 生成逻辑统一。
- 在项目根目录
composer.json的顶层加repositories字段,key 必须是"packagist"(不能是"huawei"或其他) - 示例片段:
{ "repositories": { "packagist": { "type": "composer", "url": "https://mirrors.huaweicloud.com/repository/php/composer/" } } } - 一旦写了这个,
composer install就完全忽略全局repo.packagist,优先级最高 - 提交到 Git 时保留它——否则队友拉代码后走默认源,
composer.lockhash 可能不一致
换源后仍慢?先查这三件事
镜像本身没问题,但常见误操作会让加速失效。尤其在企业网络、教育网或 CI 环境下,问题往往不在镜像,而在本地链路。
- 执行
composer clear-cache:旧缓存可能残留 packagist.org 的元数据,导致首次请求仍尝试连国外 - 检查是否被代理或防火墙拦截:在浏览器中直接打开
https://mirrors.huaweicloud.com/repository/php/composer/,看能否访问首页(返回 JSON 列表) - 确认没被项目级配置覆盖:运行
composer config -l | grep repo,如果输出里repo.packagist是空的,但repositories下有别的源(比如写了"packagist.org"),那镜像根本没接管 - 华为云镜像在内网环境(如华为云 ECS)会自动走内网加速,但本地家庭宽带有时不如阿里云快——这不是配置错了,是物理网络差异
恢复官方源或临时切换的正确姿势
不需要删配置文件,也不用手动编辑 ~/.composer/config.json。Composer 提供了干净的命令接口,避免格式错误或残留字段。
- 恢复默认源:用
composer config -g --unset repo.packagist(注意是repo,不是repos) - 临时只对一次命令生效(比如调试或 CI 中验证):不能用
--repository,因为create-project不支持该参数;正确做法是先config -g临时设好,执行完再--unset - 如果用了 Xdebug(比如 PhpStorm 默认启用),
composer create-project会明显变慢;可加环境变量临时关闭:XDEBUG_MODE=off composer create-project laravel/laravel test











