Composer本身不读取、不解析.env文件或系统环境变量,仅作为PHP依赖管理工具;环境变量需由PHP运行时(如CLI/Web)或vlucas/phpdotenv等库显式加载后才可用。

Composer 本身不管理环境变量
Composer 不读取、不解析、也不暴露 .env 文件或系统环境变量——它只是一个 PHP 依赖管理工具。你看到的“当前环境变量配置”,实际来自 PHP 运行时(如 CLI 或 Web SAPI)或项目中加载了 vlucas/phpdotenv 等库后的应用层行为。直接运行 composer 命令查不到 APP_ENV、DB_HOST 这类值。
检查 PHP CLI 环境变量(最常用场景)
多数人在终端执行 composer install 或 composer run-script 时,想确认脚本是否能读到预期的环境变量。这时应检查 PHP CLI 进程可见的变量:
- 运行
printenv | grep -i env(Linux/macOS)或set | findstr ENV(Windows CMD)看系统级变量 - 在 PHP 中验证:执行
php -r "var_dump($_ENV);"或php -r "var_dump(getenv('APP_ENV'));" - 注意:PHP 默认只导入部分系统变量(由
variables_order配置决定),$_ENV可能为空,优先用getenv() - 如果用了
phpdotenv,它只在代码中调用Dotenv::createUnsafeImmutable()->load()后才填充,Composer 自身不会触发这个加载
查看 composer.json 中定义的脚本环境(易混淆点)
composer.json 的 scripts 字段支持通过 env 键为单个脚本注入变量,但这仅限该脚本执行时生效,且需 Composer 2.4+:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
{
"scripts": {
"test:ci": {
"script": "phpunit",
"env": {
"APP_ENV": "test",
"SYMFONY_DEPRECATIONS_HELPER": "max[direct]=0"
}
}
}
}
这类配置不会影响其他命令,也无法通过 composer config 查看——它只是 JSON 结构的一部分。要确认是否生效,可在脚本中加一行 echo getenv('APP_ENV'); 并运行 composer run test:ci 观察输出。
为什么 composer config 查不到环境变量
composer config 只管理 Composer 自身的配置项,比如 github-oauth、process-timeout、fxp-asset 等,和项目运行时的环境变量完全无关:
-
composer config --list显示的是 Composer 的全局/本地设置,不是$_SERVER或.env - 试图用
composer config --global extra.env.APP_ENV=test是无效的——extra是供插件读取的元数据,PHP 不会自动将其转为环境变量 - 真正起作用的,永远是 PHP 进程启动前已存在的变量,或代码中显式调用
putenv()/$_ENV赋值的部分
别指望 Composer 做环境变量的“中央控制台”。它的职责边界很清晰:下载包、解析依赖、执行脚本——变量怎么来、怎么用,得靠你自己搭好上下文。

















