composer config -g 不显示环境变量,因 Composer 不将其存入 config.json;环境变量如 COMPOSER_HOME 由 PHP 进程读取,需用 php -r getenv() 查看或 composer diagnose 检查路径有效性。

composer config -g 显示全局配置但不包含环境变量
Composer 自身不把环境变量当作“配置项”存进 config.json,所以 composer config -g 只能看到你手动设置的全局选项(比如 github-oauth、cache-dir),看不到 COMPOSER_HOME、COMPOSER_CACHE_DIR 这类运行时生效的环境变量。
真正影响 Composer 行为的环境变量,是 PHP 进程启动时读取的,不是 Composer 自己维护的配置。
用 php -r 直接读取环境变量更可靠
Composer 基于 PHP 运行,所有环境变量都可通过 getenv() 或 $_ENV 获取。最直接的办法是绕过 Composer 命令,用 PHP 一行命令查:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
php -r "echo 'COMPOSER_HOME: '.(getenv('COMPOSER_HOME') ?: 'not set')."\n"; echo 'COMPOSER_CACHE_DIR: '.(getenv('COMPOSER_CACHE_DIR') ?: 'not set')."\n"; echo 'COMPOSER_VENDOR_DIR: '.(getenv('COMPOSER_VENDOR_DIR') ?: 'not set')."\n";"
-
COMPOSER_HOME决定全局配置和缓存根目录,默认是~/.composer(Linux/macOS)或%APPDATA%Composer(Windows) -
COMPOSER_CACHE_DIR若设置,会覆盖COMPOSER_HOME/cache路径;未设置时 Composer 自动拼接 -
COMPOSER_VENDOR_DIR只影响install时的 vendor 目录位置,不改变全局行为,且仅在项目级composer.json中通过"config": {"vendor-dir": "..."}才优先于环境变量
composer diagnose 会间接暴露部分环境影响
composer diagnose 不打印环境变量本身,但它会检查这些变量所指向的路径是否存在、是否可写,并在输出中体现:
- 如果
COMPOSER_HOME指向一个不存在的目录,它会报The COMPOSER_HOME directory is not writable或类似提示 - 如果
COMPOSER_CACHE_DIR被设为只读路径,diagnose会显示Cache is not working - 它还会检测
openssl、zlib等扩展是否启用——这些虽非环境变量,但和PHP_INI_SCAN_DIR等变量共同决定扩展加载结果
Windows 下注意 %COMPOSER_HOME% 和 PowerShell 的变量语法差异
Windows 用户容易在这里出错:
- cmd 中用
%COMPOSER_HOME%,PowerShell 中要用$env:COMPOSER_HOME - PowerShell 默认不继承父进程的环境变量(尤其从 GUI 启动时),可能显示为空,建议用
Get-ChildItem Env:COMPOSER*全局搜索 - Git Bash 里环境变量名是小写(
$composer_home),但 Composer 实际读的是大写形式,所以必须 exportCOMPOSER_HOME(而非composer_home)才生效
环境变量本身没有“Composer 内置命令”去列出来,靠的是 PHP 层面的读取逻辑和诊断反馈。最容易被忽略的是:变量值可能被 shell 启动脚本、IDE 配置、CI 环境模板覆盖,且不同 Shell 对变量继承规则不同——查的时候得确认当前终端会话的实际环境。

















