Composer global config:如何管理全局的用户级配置?

12次阅读

global config 命令可修改 gitHub OAuth、http Basic 认证、secure-http、notify-on-install 等全局配置项,作用于 ~/.composer/config.json 或 COMPOSER_HOME 指定路径,不影响项目级配置。

Composer global config:如何管理全局的用户级配置?

global config 命令能改哪些配置项?

Composer 的 global config 实际上操作的是当前用户的全局配置文件(通常是 ~/.composer/config.json),它只影响所有项目中未显式覆盖的设置,比如 github-oauthhttp-basicsecure-http 或默认仓库源 repositories。它不会修改项目级的 composer.json,也不会影响 COMPOSER_HOME 路径本身。

常见可设项包括:

  • github-oauth.github.com:用于绕过 GitHub API 限流
  • http-basic.repo.magento.com:私有包仓库认证
  • secure-http:设为 false 才允许非 https 包源(不推荐)
  • notify-on-install:控制是否在 require 时弹出通知

如何安全地设置 GitHub OAuth Token

直接在命令行里用 composer global config github-oauth.github.com 很方便,但会把 token 明文写进 ~/.composer/auth.json(注意:不是 config.json)。这个文件权限必须是 600,否则 Composer 启动时会报错:Warning: auth.json has invalid permissions

建议分两步操作:

  • 先执行 composer global config github-oauth.github.com
  • 再手动检查并修正权限:chmod 600 ~/.composer/auth.json
  • 如果已存在旧 token,重复执行会覆盖;空值可传 NULL 清除:composer global config github-oauth.github.com null

为什么 global config 不生效?常见原因

最常踩的坑是混淆了作用域层级:Composer 配置按优先级从高到低是「命令行参数」→「项目 auth.json」→「项目 composer.json」→「全局 auth.json」→「全局 config.json」。也就是说,哪怕你用 global config 设了 secure-http false,只要某个项目目录下有 composer.json 里写了 "secure-http": true,那该项目仍强制走 HTTPS。

验证当前生效的完整配置,运行:

composer global config --list --format=json

注意:该命令只显示全局配置,不合并项目级配置。真要调试某次 install 是否用了你的 token,加 -v 看详细日志更可靠。

COMPOSER_HOME 变更后 global config 还在原位置吗?

不在。Composer 会完全切换配置根目录。比如你设置了 export COMPOSER_HOME="/opt/my-composer",那么 composer global config 就会读写 /opt/my-composer/config.json/opt/my-composer/auth.json,而不是默认的 ~/.composer/

这意味着:

  • 不同 COMPOSER_HOME 环境下的全局配置互不干扰
  • CI 环境常用此方式隔离缓存与认证(如 gitlab CI 中设 COMPOSER_HOME=$CI_PROJECT_DIR/.composer
  • 切环境前务必确认 echo $COMPOSER_HOME,否则可能误配到错误路径

真实项目里,auth.json 的权限、COMPOSER_HOME环境变量、以及配置项实际生效层级,三者任何一个出偏差,都会让 token 或镜像配置静默失效——它们不报错,只是悄悄退回默认行为。

text=ZqhQzanResources