Composer不直接解析.env文件,仅支持引用已导出的系统环境变量;需在OS中export(Linux/macOS)或set/setx(Windows),并在composer.json中用${VAR_NAME}语法调用,如"url": "https://${GITHUB_TOKEN}@github.com/user/repo.git"。

Composer 本身不直接读取或解析环境变量(比如 .env 文件里的值),但它支持在 composer.json 中通过 ${VAR_NAME} 语法引用系统级环境变量——前提是这些变量已在操作系统中真正设置并导出。
确保环境变量已正确设置并导出
Composer 只能访问 shell 中“已导出”的环境变量。例如,在 Linux/macOS 中:
- ✅ 正确(导出后生效):
export MY_PACKAGE_VERSION="1.2.3" - ❌ 无效(未导出,仅当前 shell 变量):
MY_PACKAGE_VERSION="1.2.3"
Windows 命令行需用 set(临时)或系统属性(永久),PowerShell 用 $env:MY_PACKAGE_VERSION="1.2.3",但注意 Composer 在 Windows 上通常由 Git Bash 或 CMD 调用,推荐统一用 CMD 的 setx 或在 CI/CD 中明确注入。
在 composer.json 中使用 ${VAR_NAME} 占位符
你可以在 composer.json 的多个字段中使用环境变量插值,例如:
-
仓库地址:
"url": "https://${GITHUB_TOKEN}@github.com/user/repo.git" -
包版本约束:
"my/private-package": "${PRIVATE_PKG_VERSION}"(需配合repositories定义) -
脚本参数:
"scripts": {"deploy": "php deploy.php --env=${APP_ENV}"}
⚠️ 注意:该插值只在 composer install / update 运行时解析,不会写入 composer.lock;且变量必须存在,否则会报错(如 Undefined variable: FOO)。
配合 dotenv 工具(需额外处理)
Composer 不原生加载 .env 文件,但你可以用 vlucas/phpdotenv 在自定义脚本中预加载。更实用的做法是:在 CI/CD 或部署脚本中,先用 set -a; source .env; set +a(Linux)或等效方式把 .env 导入环境,再运行 composer install。
例如 GitHub Actions 中:
- name: Load env
run: |
set -a
source .env
set +a
- name: Install dependencies
run: composer install --no-interaction
调试与验证技巧
快速确认 Composer 是否读到了变量:
- 临时在
composer.json中加一个假依赖:"debug/env-test": "${MISSING_VAR}-test",然后运行composer update看是否报错 - 用
echo $MY_VAR(Linux/macOS)或echo %MY_VAR%(Windows CMD)确认变量已设 - 执行
composer config --list | grep -i env查看是否有相关配置(Composer 自身配置项不含环境变量逻辑,仅作排除)
基本上就这些。不复杂但容易忽略导出这一步。










