composer config 默认只显示当前项目 config 段内容,不自动对比全局配置;需分别用 --global --list 和 --list 导出全局与项目生效配置再手动比对,并注意环境变量优先级最高且静默覆盖。

composer config 命令默认只显示当前项目配置
直接运行 composer config 会输出当前项目的 composer.json 中的 config 段内容,**不会自动对比全局配置**。很多人误以为它能“diff”,其实它只是个查看器——想看到差异,得手动触发两套配置再比对。
用 --global 和 --list 分别导出两套配置再比较
Composer 提供了明确的标志来切换作用域:--global 读取 ~/.composer/config.json(或 Windows 下 %APPDATA%\Composer\config.json),--list 列出所有生效键值(含继承合并后的结果)。但注意:--list 在全局模式下不包含项目级覆盖项,所以必须分两次执行:
- 运行
composer config --global --list导出全局配置快照 - 运行
composer config --list(无--global)导出当前项目最终生效配置(已合并全局 + 项目config+ 环境变量) - 把两段输出保存为文件,用
diff或 VS Code 的 compare 功能看差异
示例命令(Linux/macOS):composer config --global --list > global-config.txt && composer config --list > project-config.txt && diff global-config.txt project-config.txt
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
注意 vendor-dir、cache-dir 等路径类配置的实际生效逻辑
有些配置项看似“被覆盖”,实则因路径解析顺序导致行为不符预期。比如:
-
vendor-dir在项目composer.json中设为"libs",但全局配置里设了"vendor"—— 最终用的是项目的值,这没问题 - 但如果项目中设的是相对路径
"./my-vendor",而全局是绝对路径"/opt/composer/vendor",Composer 会以项目根目录为基准解析前者,**不会 fallback 到全局路径** -
cache-dir默认由 Composer 自动推导,即使没显式配置,--list也会显示实际路径;若想确认是否真被全局影响,得查composer config --global cache-dir是否非空
别忽略环境变量对 config 的静默覆盖
Composer 会按优先级合并:环境变量 > 项目配置 > 全局配置。例如设置 COMPOSER_CACHE_DIR=/tmp/composer-cache 后,composer config --list 显示的 cache-dir 就是该值,但 composer config --global --list 完全看不到它——这种覆盖没有提示,容易误判“差异来源”。检查方式很简单:
- 运行
env | grep COMPOSER_查看是否有相关环境变量 - 临时清空环境变量再试:
env -u COMPOSER_CACHE_DIR composer config --list
真正复杂的不是命令本身,而是配置生效链路上的隐式叠加:环境变量看不见、项目配置可能被 .gitignore 掩盖、全局配置路径在不同系统上还不一样。动手前先 composer config --help 看一眼支持的标志,比凭印象猜要可靠得多。

















