
composer config --list --global 只显示你亲手设过的项
这个命令输出的不是“Composer 全局配置说明书”,而是你执行过 composer config --global key value 的操作快照。没手动设过,哪怕 cache-dir 或 sort-packages 有默认值,也不会出现。
常见误判:看到输出里没有 cache-dir,就以为没配——其实可能只是沿用默认路径(Linux/macOS 是 ~/.cache/composer,Windows 是 %LOCALAPPDATA%\Composer\Cache)。
- 查具体键值更可靠:
composer config --global cache-dir有输出说明已显式设置;空或报错说明走默认 -
composer config --global --source github-oauth.github.com会返回凭据所在文件路径(如~/.config/composer/auth.json),确认来源 - 环境变量(如
COMPOSER_CACHE_DIR)优先级最高,但--list --global完全不体现它
镜像源必须查 repo.packagist.org,不是 repositories 数组
Composer 2.2+ 唯一认的主源键名是 repo.packagist.org,它自动合并项目级与全局配置并按优先级返回最终生效 URL。旧写法(如 repos.packagist、repositories.packagist)可能残留但已不参与实际请求路由。
- 运行
composer config repo.packagist.org(不加-g)——返回 URL 即当前实际生效源;报错则说明走官方源https://packagist.org - 加
-v参数:composer config -v repo.packagist.org能看到这行配置定义在哪个文件里(项目composer.json还是全局config.json) - 别信
composer config --list | grep repositories,它容易扫出无关的自定义私有源或弃用字段
全局配置文件真实路径不能猜,必须用命令确认
新版 Composer(2.x)只读 config.json,不认旧版 composer.json;该文件默认不存在,首次运行 composer config --global 才会生成。很多人直接去 ~/.composer/composer.json 或 %USERPROFILE%\AppData\Roaming\Composer\composer.json 找,那是旧版残留或误建文件。
- 最可靠方式:
composer config --global --list第一行输出的Global configuration file就是当前生效的完整路径(如/home/alice/.config/composer/config.json) -
composer global config home --absolute只看config.json所在父目录,不依赖配置是否已初始化 -
echo $COMPOSER_HOME(Linux/macOS)或echo %COMPOSER_HOME%(Windows)可能被覆盖,--list输出的路径才是实际加载位置
改完镜像后“看似没生效”,90% 是缓存没清
Composer 不会自动感知配置变更,本地元数据缓存(如 packages.json)仍从旧地址读取,导致 update 或 require 行为滞后。
- 必须执行
composer clear-cache清除全部缓存(包括镜像元数据) - 更精准的方式:
rm -rf $(composer config cache-dir)/repo/https---packagist.org(Linux/macOS),或对应 Windows 路径 - 验证是否真生效:
composer -vvv require monolog/monolog 2>&1 | grep 'GET https',看日志里真实请求的域名 - 某些镜像(如阿里云)要求 URL 末尾带
/,写成https://mirrors.aliyun.com/composer/才稳定
--list --global 不告诉你哪一层写了什么,也不告诉你哪一层被顶掉了。查具体键、盯来源文件、验 composer diagnose 输出,三步缺一不可。


















