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

发布时间 - 2025-09-24 00:00:00    点击率:
答案是通过事件名称解析和环境变量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  # js  # json  # composer  # 处理器  # 环境变量  # Event  # 对象  # 事件  # 可以通过  # 类中  # 的是  # 是在  # 可在  # 自定义  # 可以用来  # 判断是否  # 最可靠  # 可用于 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php结合redis实现高并发下的抢购、秒杀功能的实例  如何在IIS服务器上快速部署高效网站?  西安专业网站制作公司有哪些,陕西省建行官方网站?  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  googleplay官方入口在哪里_Google Play官方商店快速入口指南  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  Android 常见的图片加载框架详细介绍  如何快速上传自定义模板至建站之星?  公司门户网站制作流程,华为官网怎么做?  使用Dockerfile构建java web环境  如何在景安服务器上快速搭建个人网站?  如何在腾讯云免费申请建站?  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  Laravel中的withCount方法怎么高效统计关联模型数量  深圳网站制作平台,深圳市做网站好的公司有哪些?  如何在云主机快速搭建网站站点?  如何在局域网内绑定自建网站域名?  nginx修改上传文件大小限制的方法  如何用西部建站助手快速创建专业网站?  如何快速搭建个人网站并优化SEO?  大同网页,大同瑞慈医院官网?  Laravel PHP版本要求一览_Laravel各版本环境要求对照  Laravel如何处理文件下载请求?(Response示例)  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  Thinkphp 中 distinct 的用法解析  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  如何在企业微信快速生成手机电脑官网?  英语简历制作免费网站推荐,如何将简历翻译成英文?  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  免费网站制作appp,免费制作app哪个平台好?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  个人摄影网站制作流程,摄影爱好者都去什么网站?  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  Laravel如何使用Vite进行前端资源打包?(配置示例)  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  C语言设计一个闪闪的圣诞树  Windows Hello人脸识别突然无法使用  如何用虚拟主机快速搭建网站?详细步骤解析  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  android nfc常用标签读取总结  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?