信息发布→ 登录 注册 退出

在composer scripts中如何获取当前执行的命令名称

发布时间:2025-09-24

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

在 Composer scripts 中,无法直接通过内置变量获取当前执行的命令名称(如 installupdate 等),但可以通过一些间接方式判断或传递命令信息。

使用自定义脚本并显式传参

最可靠的方式是在 composer.json 中定义脚本时,手动将命令名称作为参数传递给 PHP 脚本。

例如:

{
    "scripts": {
        "post-install-cmd": [
            "php handle-script.php install"
        ],
        "post-update-cmd": [
            "php handle-script.php update"
        ]
    }
}

handle-script.php 中接收参数:



通过环境变量识别执行上下文

Composer 在执行某些脚本时会设置特定环境变量,可以用来判断上下文。

例如,判断是否是 installupdate


COMPOSER_COMMAND 环境变量通常可用于大多数标准命令场景。

在事件监听类中使用 Event 对象

如果使用的是 PHP 类作为脚本处理器,可以通过 Script\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 来判断执行上下文。不复杂但容易忽略细节。

标签:# 可以通过  # 可用于  # 最可靠  # 判断是否  # 可以用来  # 自定义  # 可在  # 是在  # 的是  # 类中  # php  # 事件  # 对象  # Event  # 环境变量  # 处理器  # composer  # json  # js  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!