Composer全局config.json默认路径:Linux/macOS为~/.composer/config.json,但2.2+版本优先读取~/.config/composer/config.json;Windows为%APPDATA%\Composer\config.json,须用composer config --global home命令确认真实路径。

Linux/macOS 的全局 config.json 在哪
默认路径是 ~/.composer/config.json,也就是 /home/用户名/.composer/config.json(Linux)或 /Users/用户名/.composer/config.json(macOS)。但注意:较新版本 Composer(2.2+)会优先尝试 ~/.config/composer/config.json,如果该路径存在且可读,就用它;否则回落到 ~/.composer/config.json。
别靠猜,直接运行:composer config --global --list
输出里第一行的 home 值就是实际生效的根目录,config.json 就在它下面。
- 如果你看到
home指向~/.config/composer,那就去那里找config.json - 如果
~/.composer早已存在且有配置,Composer 通常仍会沿用它,不会自动迁移 - 手动创建
~/.config/composer/config.json并不等于覆盖旧配置——两个路径互不感知,只有home指向的那个才生效
Windows 的全局 config.json 路径怎么确认
标准路径是 %APPDATA%\Composer\config.json,展开后通常是 C:\Users\用户名\AppData\Roaming\Composer\config.json。但关键问题是:PowerShell 里 %APPDATA% 不会自动展开,直接拼路径会静默失败。
所以不要手敲路径,一律用命令确认:composer config --global home
这条命令输出的就是真实、可用的路径,复制粘贴即可。
- AppData 是隐藏文件夹,资源管理器需开启“显示隐藏的项目”才能看见
- 某些企业环境可能通过组策略禁用了 AppData,此时 Composer 可能 fallback 到
%USERPROFILE%\Composer,config --global home同样能暴露它 - 别用
echo %APPDATA%或$env:APPDATA去拼接——不同 shell 展开行为不一致,容易出错
为什么 composer config --global 设的值没生效
最常见原因是搞混了「配置写入位置」和「配置读取时机」。全局配置只影响 composer global 命令本身和部分跨项目行为(如镜像源、auth),但 composer install 或 composer update 默认只读项目级 composer.json 和其 config 段,完全忽略全局 config.json 中的同名项。
-
discard-changes、platform-check这类开关,必须写进项目composer.json的"config"字段才起作用 -
repo.packagist.org镜像设置可以全局配,因为它属于「环境基础设施」,项目无需感知 - 运行
composer config --list(不带--global)进项目后对比输出,能立刻看出哪些是项目级覆盖的
如何安全地修改全局配置路径
不建议直接移动文件夹。Composer 提供了受控方式:设环境变量 COMPOSER_HOME。这是唯一被所有 Composer 版本一致尊重的方式。
Linux/macOS(写入 ~/.zshrc 或 ~/.bashrc):export COMPOSER_HOME="$HOME/.my-composer"
Windows(系统属性 → 环境变量 → 新建用户变量):
变量名:COMPOSER_HOME,变量值:C:\my-composer
- 改完后新开终端,再跑
composer config --global home,应返回新路径 - 旧
~/.composer下的内容不会自动迁移,需要手动复制config.json和vendor/(如果有的话)过去 - 千万别编辑
config.json里的home字段来“欺骗”Composer——它只读环境变量或默认路径,这个字段只是展示用


















