composer config 是直接修改配置的最快最安全方式,支持项目级和全局配置,可查删配置避免错误,需注意键名大小写、层级结构及作用域区分。

composer config 是直接改配置的最快方式,不用手动编辑 composer.json 或全局 config.json,改完立刻生效,且自动校验 JSON 格式——这是最安全、最推荐的修改路径。
怎么改项目级 config(比如 vendor 目录、镜像源)
默认所有 composer config 命令都在当前项目根目录下运行,会直接写入本地 composer.json 的 config 或对应顶层字段(如 repositories)。
- 改
vendor目录:composer config vendor-dir ./libs
→ 生成"config": {"vendor-dir": "libs"} - 设国内镜像(仅当前项目):
composer config repos.packagist composer https://mirrors.aliyun.com/composer/
→ 注意是repos.packagist(复数repos),不是repo.packagist,拼错会导致镜像不生效 - 加自定义仓库:
composer config repositories.my-private repo https://packages.example.com
→ 会新增一个名为my-private的仓库条目 - 启用插件授权(Composer 2.2+ 必须):
composer config allow-plugins.vendor/package-name true
→ 不设会报Plugin ... is not allowed错误
怎么改全局 config(比如 GitHub token、缓存路径)
加 --global(或 -g)参数,修改的是用户主目录下的 ~/.composer/config.json(Windows 在 C:\Users\{user}\AppData\Roaming\Composer\config.json)。这个文件首次使用 --global 时会自动创建。
- 设全局镜像:
composer config --global repos.packagist composer https://mirrors.aliyun.com/composer/
- 配 GitHub OAuth Token(防 API 限流):
composer config --global github-oauth.github.com abc123def456...
→ Token 必须带--global,否则只写进当前项目,毫无意义 - 改缓存目录(避免 SSD 写入过多):
composer config --global cache-dir /mnt/data/composer-cache
- 关 HTTPS 验证(仅调试用!生产环境禁用):
composer config --global secure-http false
→ 否则私有 HTTP 仓库无法访问,但会触发警告
怎么查和删配置,避免残留干扰
配置写错、重复设置或迁移到新环境后旧配置残留,都可能引发奇怪行为(比如镜像没生效、插件被拒绝、vendor 路径错乱)。务必学会查和清理。
- 查全部生效配置(含项目 + 全局叠加结果):
composer config --list
- 只查全局配置:
composer config --list --global
- 查某一项(比如确认 GitHub token 是否已设):
composer config --global github-oauth.github.com
- 删掉某项(比手动删 JSON 更安全):
composer config --unset vendor-dir
或全局删:composer config --global --unset github-oauth.github.com
容易踩的坑:键名大小写、数组嵌套、作用域混淆
Composer 的配置键名对大小写和层级非常敏感,且不同字段归属不同层级(config、repositories、allow-plugins 等互不隶属),命令写错只会静默失败或写到错误位置。
-
vendor-dir属于config下;repos.packagist是repositories下的子键;allow-plugins.foo/bar是顶层字段 —— 没有统一前缀,必须记准 - 想往
repositories数组追加多个源?不能反复用composer config repositories.x,否则后者会覆盖前者。应先查现有结构:composer config repositories
,再用完整 JSON 替换(或借助--json参数) - 执行
composer config时不加--global却以为改了全局?常见于在错误目录下运行,或误信“一次设置,处处生效”——其实项目级配置优先级高于全局,冲突时以项目为准
composer config,关键是每次操作前先 --list,改完立刻 install 或 update 验证效果;别依赖记忆,键名复制粘贴最稳妥。










