composer config -l 显示五层叠加后的最终生效值,不标注来源、不显示未显式设置的默认项;在项目根目录执行才有效,查具体键值或加 --show-source 更可靠。

composer config -l 显示的是合并后的最终值,不是原始配置文件
它把命令行参数、环境变量、项目 composer.json 的 config 段、全局 config.json、内置默认值五层叠加后“胜出”的结果一次性平铺出来,但不标注来源、不保留嵌套结构、也不显示未被显式设置的默认项(比如 sort-packages 默认为 true,但没手动设过就不会出现在 -l 输出里)。
常见误判:cache-dir: null 不代表没生效,只是所有层级都没显式定义,Composer 会 fallback 到默认路径(Linux/macOS 是 ~/.cache/composer);process-timeout: 0 可能是 CI 脚本故意关掉超时,不是配错了。
- 在非项目目录执行
composer config -l会直接报错Could not find composer.json - 改完配置后必须在**同一项目根目录**下运行
composer config -l才能看到效果 -
-l输出里带(global)标记的,说明该值来自全局配置;没标记的,可能是项目级或环境变量注入的
查具体键值比扫列表更可靠
对关键配置项,放弃通读 composer config -l,直接查值:
- 查当前项目缓存路径:
composer config cache-dir - 查全局缓存路径:
composer config --global cache-dir - 查 Packagist 镜像源(v2+ 推荐):
composer config repos.packagist.org.url和composer config --global repositories.packagist.org.url - 查 GitHub 认证是否配置:
composer config github-oauth.github.com(项目级)或composer config --global github-oauth.github.com(全局) - 查值来源文件:
composer config --global --source github-oauth.github.com会返回类似~/.config/composer/auth.json
composer config sort-packages 返回的是明确布尔值,比 -l 输出的字符串 true 更可信;composer config --show-source cache-dir 能直接告诉你这个值来自 project、global 还是 default。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
环境变量会隐身覆盖配置,但 config -l 完全不体现
环境变量优先级最高,比如 COMPOSER_CACHE_DIR 或 COMPOSER_REPO_PACKAGIST 一旦设置,就绕过所有配置文件,且 composer config -l 只输出最终值,不提示你被谁覆盖了。
- Linux/macOS 下检查:
echo $COMPOSER_CACHE_DIR、echo $COMPOSER_REPO_PACKAGIST - Windows 下检查:
echo %COMPOSER_CACHE_DIR%、echo %COMPOSER_REPO_PACKAGIST% - 如果这些变量已设置,它们会直接覆盖
config.json或composer.json里的同名项 -
composer diagnose输出中Repo packagist.org行显示的 URL,才是最终生效的镜像地址,比config -l更真实
全局配置文件位置不能猜,必须用命令确认
新版 Composer(2.x)只读 ~/.config/composer/config.json(Linux/macOS)或 %APPDATA%\Composer\config.json(Windows),旧版残留的 ~/.composer/composer.json 是无效路径。
- 最可靠方式:
composer config --global --list第一行就输出Global configuration file的完整路径 - 轻量确认父目录:
composer global config home --absolute - 环境变量
$COMPOSER_HOME或%COMPOSER_HOME%可能被覆盖,--list输出的路径才是实际加载位置 -
composer config --list --global只显示你亲手设过的项,没执行过composer config --global key value,哪怕有默认值也不会出现
真正起作用的配置是四层叠加后的结果,--list --global 不告诉你哪一层写了什么,也不告诉你哪一层被顶掉了——这是最常被忽略的复杂点。










