答案是通过事件名称解析和环境变量COMPOSER_COMMAND判断执行命令。可在脚本中使用$argv传参、读取COMPOSER_COMMAND环境变量或在事件类中解析事件名来识别install或update命令。

在 Composer scripts 中,无法直接通过内置变量获取当前执行的命令名称(如 install、update 等),但可以通过一些间接方式判断或传递命令信息。
最可靠的方式是在 composer.json 中定义脚本时,手动将命令名称作为参数传递给 PHP 脚本。
例如:
{
"scripts": {
"post-install-cmd": [
"php handle-script.php install"
],
"post-update-cmd": [
"php handle-script.php update"
]
}
}
在 handle-script.php 中接收参数:
<?php $command = $argv[1] ?? 'unknown'; echo "当前执行的命令是: " . $command;
Composer 在执行某些脚本时会设置特定环境变量,可以用来判断上下文。
例如,判断是否是 install 或 update:
<?php
if (getenv('COMPOSER_COMMAND') === 'install') {
echo "正在执行 composer install";
} elseif (getenv('COMPOSER_COMMAND') === 'update') {
echo "正在执行 composer update";
}
COMPOSER_COMMAND 环境变量通常可用于大多数标准命令场景。
如果使用的是 PHP 类作为脚本处理器,可以通过 Script\Event 对象获取命令信息。
<?php
use Composer\Script\Event;
class MyScriptHandler
{
public static function postCmd(Event $event)
{
$command = $event->getComposer()->getCommand();
// 注意:并非所有版本都支持 getCommand()
// 更稳妥的方式是通过 $event->getName() 获取事件名
$eventName = $event->getName(); // 如 post-install-cmd
if (strpos($eventName, 'install') !== false) {
echo "由 install 命令触发\n";
} elseif (strpos($eventName, 'update') !== false) {
echo "由 update 命令触发\n";
}
}
}
对应的 composer.json 配置:
{
"scripts": {
"post-install-cmd": "MyScriptHandler::postCmd",
"post-update-cmd": "MyScriptHandler::postCmd"
}
}
基本上就这些。Composer 没有提供直接获取原始 CLI 命令的统一方法,推荐结合 事件名称解析 和 环境变量 COMPOSER_COMMAND 来判断执行上下文。不复杂但容易忽略细节。
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号