全局配置 composer config -g repo.packagist 不生效,因键名必须严格为 repo.packagist(单数、小写、带 repo. 前缀),且需同时指定 type 和 URL;Composer ≥2.2 应改用 repositories.packagist.org。

全局配置 composer config -g repo.packagist 不生效,大概率不是网络问题,而是键名、type 或 URL 三者中至少漏了一个——它不会报错,只会静默失效。
为什么 composer config -g repo.packagist 总是空或 null
Composer 内部硬编码只识别 repo.packagist(单数、小写、无 s),写成 repos.packagist、packagist.org 或 Repo.Packagist 都会存进无效字段。命令看似执行成功,但 composer config -g repo.packagist 查出来就是空或 null。
-
composer config -g repo.packagist输出为空 → 键名写错 - 输出
{"url": "https://packagist.org"}→ 没覆盖成功,可能被项目级配置屏蔽 - 输出
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}→ 正确写入
composer config -g 命令必须带齐的三个参数
这条命令不是“两段式”,而是严格三元组:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,缺一不可。
-
-g:指定全局作用域;不加就只改当前目录下的composer.json -
repo.packagist:唯一合法 key,大小写敏感,不能多 s,不能少repo.前缀 -
composer:type 值,不是注释也不是可选项;省略后 Composer 2.0+ 会 fallback 到默认源 -
https://mirrors.aliyun.com/composer/:URL 必须 HTTPS 开头,且末尾必须有/;否则拼出.../composerpackages.json导致 404
Composer ≥2.2 应该用 repositories.packagist.org
新版(查版本:composer --version)已转向 repositories.packagist.org,继续用 repo.packagist 可能被静默忽略,尤其在 CI 环境或 Docker 镜像里。
立即学习“PHP免费学习笔记(深入)”;
- 设阿里云:
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 --unset repositories.packagist.org - 注意 value 必须是合法 JSON 字符串(单引号包裹整个值,内部双引号保留)
项目级配置比全局更可靠,但要注意格式陷阱
进项目根目录运行 composer config repo.packagist composer https://mirrors.aliyun.com/composer/(去掉 -g),它会安全合并进 composer.json 的 repositories 字段,但前提是原 repositories 是对象(如 "repositories": {}),不是数组。
- 如果
composer.json里已有"repositories": []或"repositories": {"packagist.org": false},全局配置完全失效 - 数组格式会直接报错,需先手动改成对象再执行命令
- 提交 Git 后,队友
git pull && composer install自动走镜像,composer.lockhash 一致 - 某些模板(如 Laravel 脚手架)自带禁用 packagist 的配置,得先删掉或重置:
composer config --unset repositories
换源后一定要 composer clear-cache,否则本地缓存的 packages.json 元数据仍指向旧地址;验证时别只看命令回显,要盯 composer diagnose 的 “Repo:” 行,以及 composer update -vvv 日志里 Downloading 的实际 URL —— 那才是真实请求路径。



















