答案是通过事件名称解析和环境变量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:
<?phpif (getenv('COMPOSER_COMMAND') === 'install') { echo "正在执行 composer install";} elseif (getenv('COMPOSER_COMMAND') === 'update') { echo "正在执行 composer update";}
COMPOSER_COMMAND 环境变量通常可用于大多数标准命令场景。
在事件监听类中使用 Event 对象
如果使用的是 PHP 类作为脚本处理器,可以通过 ScriptEvent 对象获取命令信息。
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 来判断执行上下文。不复杂但容易忽略细节。
以上就是在composer scripts中如何获取当前执行的命令名称的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/149500.html
微信扫一扫
支付宝扫一扫