通过环境变量控制Composer脚本行为,可在不同环境下执行特定逻辑。1. 使用getenv读取APP_ENV判断环境;2. 命令行如APP_ENV=production执行安装;3. 结合phpdotenv加载.env文件;4. 用COMPOSER_DEV_MODE区分运行上下文,提升自动化灵活性。

在使用 Composer 管理 PHP 项目依赖时,有时需要让脚本根据运行环境做出不同行为,比如区分开发、测试和生产环境。通过在 Composer 脚本中使用环境变量,可以灵活控制执行逻辑。以下是几种实用的技巧,帮助你在 Composer 脚本中与系统环境变量有效交互。
1. 在脚本中读取环境变量
Composer 本身不提供直接定义环境变量的功能,但它执行的脚本运行在系统的 shell 环境中,因此可以直接访问已设置的环境变量。
例如,在自定义的 PHP 脚本中读取 APP_ENV:
// scripts/PostInstall.php
class PostInstall
{
public static function dumpInfo()
{
$env = getenv('APP_ENV') ?: 'development';
echo "当前环境: $env\n";
if ($env === 'production') {
// 执行生产环境特有操作
echo "跳过调试工具安装\n";
}
}
}
"scripts": {
"post-install-cmd": "PostInstall::dumpInfo"
}
2. 通过命令行传递环境变量
在执行 composer install 或 update 时,可以直接在命令前设置变量:
APP_ENV=production php composer.phar install
这样脚本中调用 getenv('APP_ENV') 就能获取到值。这种方式适用于 CI/CD 流程,不同阶段使用不同变量启动。
3. 使用 .env 文件加载环境变量
许多 PHP 项目使用 vlucas/phpdotenv 来管理配置。你可以在 Composer 脚本执行前自动加载 .env 文件。
先安装依赖:
composer require --dev vlucas/phpdotenv
然后在脚本开头加载:
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__.'/..'); $dotenv->safeLoad(); // 不报错未定义变量
这样即使本地没有显式导出变量,也能从 .env 文件读取,提升可移植性。
4. 区分脚本运行上下文
有时候你需要判断脚本是被用户直接运行,还是由 Composer 自动触发。可以结合环境变量和调试信息实现:
$cli = getenv('COMPOSER_DEV_MODE') ? 'development' : 'optimized';
echo "构建模式: $cli\n";
配合 shell 脚本使用:
COMPOSER_DEV_MODE=1 composer install
让同一脚本能适应不同构建需求。
基本上就这些。关键在于理解 Composer 脚本运行在系统环境中,所有标准的环境变量机制都适用。合理使用 getenv、.env 文件和命令行传参,可以让自动化流程更智能、更可靠。










