Composer.json不支持直接使用环境变量,需通过composer-config-plugin插件(推荐)、脚本预生成模板文件或COMPOSER_AUTH/platform配置等间接方式实现变量注入。

在 composer.json 中不能直接使用环境变量,因为 Composer 在解析该文件时并不执行 shell 或读取系统环境。但可以通过 动态生成配置 的方式实现“引用环境变量”的效果,核心思路是:用脚本预处理 composer.json,或利用 Composer 的 config 和插件机制间接注入。
使用 composer-config-plugin(推荐)
这是一个广泛使用的第三方插件,允许你在 composer.json 中通过占位符(如 ${ENV_NAME})引用环境变量,并在安装/更新时自动替换。
- 先安装插件:
composer require --dev netresearch/composer-config-plugin - 在
composer.json的extra部分定义变量映射,例如:
"extra": {
"config-plugin": {
"env": {
"DB_HOST": "${DB_HOST}",
"APP_ENV": "${APP_ENV}"
}
}
}
然后在其他字段中引用,比如自定义包仓库地址、脚本参数等(需配合支持该插件的工具链,如 roave/security-advisories 或自定义 installer)。
用脚本预生成 composer.json(轻量可控)
适合 CI/CD 或容器化部署场景,不依赖额外插件。
- 把原始配置写成
composer.json.tpl,其中用{{DB_HOST}}这类模板语法占位 - 用
envsubst(Linux/macOS)或简单 PHP/Python 脚本替换变量并生成最终composer.json - 再运行
composer install
示例(shell):
envsubst < composer.json.tpl > composer.json composer install
通过 COMPOSER_AUTH 和平台配置间接生效
Composer 原生支持部分环境驱动配置:
-
COMPOSER_AUTH环境变量可传入私有仓库认证信息(JSON 格式),Composer 会自动识别 -
platform配置可通过composer config platform.php ${PHP_VERSION}动态设置,适合多版本构建 - 某些字段如
repositories的 URL 若含敏感信息,建议改用auth.json+ 环境变量注入,而非硬编码进composer.json
避免常见误区
不要尝试在 composer.json 中写 "version": "${VERSION}" 或执行 $(echo $VERSION) —— 这些不会被解析,会导致 JSON 格式错误或安装失败。
也不建议在 scripts 中用 sed 直接改 composer.json,容易破坏结构且不可逆。










