composer config --global 是唯一安全的全局配置修改方式,它自动校验、格式化并隔离作用域;手动编辑 JSON 易出错且静默失效,旧键名如 repo.packagist 在 Composer 2.0+ 已无效,必须用 repos.packagist.org.url。

用 composer config --global 是唯一安全的改法
手动编辑 ~/.composer/config.json 或 ~/.config/composer/config.json 看似直接,但极易出错:JSON 格式一错,所有 composer 命令都会报错;嵌套结构写错(比如 repos.packagist vs repos.packagist.org.url),配置就静默失效;权限问题在 Docker 或 CI 环境里还可能卡住整个流程。命令行操作会自动格式化、校验路径、隔离作用域——这是 Composer 官方设计的唯一推荐路径。
-
composer config --global写入全局配置,影响你账户下所有项目 - 漏掉
--global(或-g)参数?它就默默改了当前项目的composer.json,不是你想要的“全局” - 执行后不生效?先跑一遍
composer config --global --list,确认键名拼写和值是否真写进去了
repos.packagist.org.url 是 Composer 2.0+ 的镜像正确写法
旧教程里常见的 repo.packagist 或 repos.packagist.url 在 Composer 2.0 及以后版本已完全失效。官方源标识现在统一为 packagist.org,必须按完整路径设置,否则镜像不会切换,你还以为网络慢,其实是根本没走镜像。
- 设阿里云镜像:
composer config --global repos.packagist.org.url https://mirrors.aliyun.com/composer/ - 恢复官方源:
composer config --global repos.packagist.org.url https://repo.packagist.org - 想彻底禁用官方源(比如只用私有仓库):
composer config --global repos.packagist.org false - 别试图配多个
packagist.org,只能有一个;其他镜像得用repositories手动声明,且优先级低于它
github-oauth.github.com 和 store-auths 要一起设才管用
只配 github-oauth.github.com 令牌,不代表下次拉包就自动用上。Composer 默认不保存认证凭据,每次遇到需要鉴权的 GitHub 请求,还是会弹密码提示——除非你明确告诉它“可以存”。
- 先开存储开关:
composer config --global store-auths true(默认已是true,但显式设一次更稳妥) - 再设令牌:
composer config --global github-oauth.github.com "your_token_here"(值必须加英文双引号,含空格或特殊字符时尤其关键) - 令牌设错或过期?
composer diagnose会提示 “GitHub API rate limit” 类错误,不是网络问题 - 改完别急着
update,先composer clear-cache,避免缓存里还带着旧的未授权请求记录
配置改了但行为没变?检查作用域叠加和生效时机
全局配置不是开关,它只是提供默认值。一旦项目自己的 composer.json 里也写了同名配置(比如 "config": { "secure-http": false }),那项目级就会覆盖全局级。而且很多配置项(如镜像、token)只在下次运行 install、require 或 create-project 时才真正参与解析,不会重装已有 vendor/ 或刷新已缓存的包元数据。
- 查当前实际生效的全部配置(含项目+全局叠加结果):
composer config --list - 只看全局部分:
composer config --global --list - 删错配置?用
--unset比手动删 JSON 字段安全得多:composer config --global --unset repos.packagist.org.url - 最常被忽略的一点:
COMPOSER_HOME环境变量可能把全局配置指向了意外路径,尤其在 CI 或多用户机器上,先composer config --global home确认位置










