composer config --list 显示的是当前项目目录下最终生效的配置快照,由命令行参数 > 环境变量 > 项目 composer.json > 全局 ~/.composer/config.json 合并生成,不标注来源、不显示默认值、不列出未显式设置项。

composer config --list 看到的到底是谁的配置?
composer config --list 显示的是「当前项目目录下最终生效的配置快照」,不是纯项目配置,也不是纯全局配置,而是命令行参数 > 环境变量 > 项目 composer.json > 全局 ~/.composer/config.json 合并后的结果。它不标注来源,容易误判哪一层改了什么。
- 如果在没有
composer.json的目录执行,会直接报错:Could not find composer.json,不会静默返回空 - 环境变量(如
COMPOSER_CACHE_DIR)优先级高于所有配置文件,但--list输出里只显示值,看不出是环境变量写的还是文件写的 - 默认值(如
process-timeout=300、bin-dir=vendor/bin)根本不会出现在输出里——没显式设置,就不列 - 嵌套键名被展平成点号路径(如
repositories.packagist.org.url),眼花易漏,尤其查镜像源时得同时试repos.packagist和旧式repo.packagist.org
怎么准确查镜像源地址?别只信 --list
查 Packagist 镜像最可靠的方式不是 composer config --list | grep repos,而是直击键名:
- 查全局镜像:
composer config -g repos.packagist—— 返回 JSON 表示已设;报错或空则用官方源 - 查当前项目镜像:
composer config repos.packagist—— 项目级覆盖优先,适合调试本地临时换源 - 注意键名是复数
repos.packagist,不是repo.packagist;v2+ 推荐写法,旧版repo.packagist.org已弃用 - 如果两个都返回空,说明没显式配置,Composer 默认走
https://packagist.org(且secure-http为 true 时强制 HTTPS)
想对比项目和全局配置差异?别合并看,要分拆比
用 composer config --list 和 composer config --global --list 同时跑,再人工对齐,效率低还易错。更实用的做法是按需查具体字段:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 查缓存路径是否被覆盖:
composer config cache-dirvscomposer config --global cache-dir - 查 GitHub 认证是否仅全局有效:
composer config github-oauth.github.com(项目级极少设) - 用 JSON +
jq快速定位仓库结构:composer config --list --format=json | jq '.config.repositories' - 加
grep快筛关键项:composer config --list | grep -E '^(cache-dir|vendor-dir|secure-http)'
为什么改了配置,install 却没生效?
常见原因是配置被更高优先级来源覆盖,而 --list 只告诉你“结果”,不告诉你“谁写的”。比如:
- 项目
composer.json里写了"cache-dir": "/tmp",但你刚在 shell 里执行了export COMPOSER_CACHE_DIR="/home/user/cache",那composer install就真用后者,--list也只显示后者 -
composer clear-cache不重读配置,它只是删缓存;配置是否生效,取决于下一次install或update时 Composer 初始化阶段读到的值 - 某些字段(如
cafile)只认全局配置或环境变量,项目composer.json里写无效,但--list仍可能显示一个“看似被覆盖”的值,其实是 fallback 到默认或全局
真正难排查的,永远是那些没出现在 --list 里的东西:环境变量、未显式设置的默认行为、插件注入的隐式配置。盯着输出看不如动手验证——改完立刻 composer diagnose 或 composer install -vvv 看实际加载路径和请求 URL。

















