答案是:因键名必须为 repo.packagist(单数小写无s)、需加 -g 参数、URL 末尾必须有 / 且用 HTTPS,三者任一错误均导致静默失效。

直接执行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 就能全局生效,但 90% 的失败不是网络问题,是命令漏了 -g、键名写成 repos.packagist、或 URL 少了末尾 /——三者任一出错,Composer 都静默走官方源,且完全不报错。
为什么 composer config -g repo.packagist 总不生效?
这不是配置被覆盖,而是 Composer 内部硬编码只识别 repo.packagist(单数、全小写、无 s)。写成 repos.packagist 或 packagist.org,配置会悄悄存进无效字段,composer config -g repo.packagist 查出来就是空或 null,install 和 update 仍卡在 Loading composer repositories。
-
-g缺失 → 只改当前项目composer.json,换目录就失效 -
composer类型值漏掉 → 命令看似成功,实际 fallback 到https://packagist.org - URL 末尾没
/→ 请求路径拼成/composerpackages.json,直接 404 或Invalid repository type - 用
http://开头 → Composer 2.x 默认拒绝非 HTTPS 源,报cURL error 60或连接超时
该用 repo.packagist 还是 repositories.packagist.org?
Composer 1.x 认 repo.packagist,2.2+ 更推荐 repositories.packagist.org。后者兼容性更稳,尤其在 2.9.6 等新版中,旧键名可能被静默忽略。
- 阿里云(推荐):
composer config -g repositories.packagist.org '{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}' - 腾讯云(带 fallback):
composer config -g repositories.packagist.org '{"type": "composer", "url": "https://mirrors.cloud.tencent.com/composer/"}' - 中科大(同步略慢):
composer config -g repositories.packagist.org '{"type": "composer", "url": "https://packagist.mirrors.ustc.edu.cn/"}' - 清华旧镜像
https://packagist.phpcomposer.com已下线,继续用会报Could not resolve host
项目级配置比全局更可靠,怎么安全写入?
全局配置在 CI、宝塔面板、多用户环境里极易权限错位或被覆盖;项目级配置写进 composer.json,可 Git 跟踪,新人拉代码后行为一致。
- 进项目根目录,运行:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(注意不加-g) - 它会自动向
"repositories"字段写入"packagist"子项,前提是原字段是对象(如{"packagist": {}}),不是数组 - 如果
"repositories": []或"repositories": {},命令仍能 merge;但若已是数组格式,会报错,需先手动转成对象 - 已有私有仓库配置时,这条命令不会覆盖,而是合并;但若原
"repositories"是{"packagist.org": false},等于禁用默认源又没指定替代,结果就是Could not find package
验证是否真在用镜像源?别靠“好像快了”判断
运行 composer config -g repo.packagist 或 composer config -g repositories.packagist.org,输出必须是完整 JSON 对象,比如:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null、报错或仍是 https://packagist.org,说明没配成功。
- 再跑一次
composer diagnose,看 “Repo” 行是否显示你设的镜像地址 - 首次切换后务必执行
composer clear-cache,否则本地元数据缓存仍指向旧源 - 临时调试不想动配置?用
composer update -vvv --repository=https://mirrors.cloud.tencent.com/composer/,日志第一行会打印真实请求 URL - Windows 用户用 Git Bash 时,
COMPOSER_HOME可能未生效,实际读的是%APPDATA%\Composer\config.json,建议直接打开该文件确认内容
最易被忽略的点:配置命令本身不校验 URL 是否可达,也不清缓存 —— 所以即使命令返回成功,clear-cache 和验证输出这两步缺一不可;另外,华为云路径含 /repository/php/,不能直接套阿里云模板,复制命令前务必核对斜杠和路径结构。


















