热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将命令行参数传递给package.json中的npm脚本

如何解决《将命令行参数传递给package.json中的npm脚本》经验,为你挑选了1个好方法。

我在package.json中有以下脚本:

"scripts": {
    "vumper": "node node_modules/vumper/index.js",
    "format": "prettier --single-quote -
 },

'vumper'包接受命令行参数(例如'dv').我希望能够做的是拥有一个连续运行这两个命令的命令.

基本上,我希望能够运行:

npm run vumber dv

然后

npm run format

但在一个命令中,类似于

npm run my-build dv

这将运行上述两个命令,正确接受命令行参数'dv'并将其传递给第一个npm run vumper.这可能吗?



1> RobC..:

简答:

基本上,你想要的是拥有这样的npm脚本,通过CLI提供;

...
"scripts": {
  "my-build": "npm run vumper  && npm run format",
  ...
},
...

但是,不幸的是,npm没有内置功能来实现这一目标.

特殊的npm选项--(请参阅下面的解决方案1的结尾以获取有关此选项的更多信息),只能用于将参数传递给脚本的END但不能传递给MIDDLE.因此,如果您的两个命令顺序相反,则--可以使用以下选项:

...
"scripts": {
  "my-build": "npm run format && npm run vumper --",
  ...
},
...

要克服没有内置功能将参数传递到脚本的MIDDLE的限制,请考虑以下解决方案:

    有关仅限Bash的解决方案,请参阅"解决方案1"部分.

    如果需要跨平台支持,请遵循"解决方案2"部分中描述的解决方案.


解决方案1 ​​ - Bash(MacOS/Linux/etc ..):

my-buildpackage.jsonscripts部分配置脚本以调用Bash shell函数,如下所示:

的package.json

...
"scripts": {
  "my-build": "func() { npm run vumper \"$1\" && npm run format; }; func",
  "vumper": "node node_modules/vumper/index.js",
  "format": "prettier --single-quote -
},
...

说明:

命名的Bash函数func执行以下操作:

    首先运行npm run vumper .由此,将通过CLI传递的shell参数.它在脚本中引用$1(即第一个位置参数 /参数).

    随后它运行format通过命令命名的脚本npm run format.

这两个npm run命令使用&&运算符链接,因此第二个npm run format命令仅在初始npm run vumper 命令成功完成时运行(即返回0退出代码).

运行my-build脚本:

my-build通过CLI 调用,您需要运行:

npm run my-build -- dv

注意:

    在这种情况下,尾随dv部分是将传递给您的vumper脚本的参数.

    --必须在参数之前指定特殊选项.该文档描述的--选项为:

    ...特殊的选项--是使用getopt分隔的选项的结束.npm会将所有参数--直接传递给您的脚本:...参数只会传递给之后指定的脚本,npm run而不会传递给任何前置或后置脚本.


解决方案2 - 跨平台:

对于跨平台解决方案(使用Bash,Windows命令提示符/ cmd.exe和PowerShell等成功运行的解决方案),您需要使用nodejs帮助程序脚本,如下所示.

run.js

让我们命名脚本的NodeJS run.js并将其保存在项目根目录下,在同一级别的package.json.

const execSync = require('child_process').execSync;

const arg = process.argv[2] || 'dv'; // Default value `dv` if no args provided via CLI.

execSync('npm run vumper ' + arg, {stdio:[0, 1, 2]});
execSync('npm run format', {stdio:[0, 1, 2]});

的package.json

配置my-build脚本以调用run.js,如下所示:

...
"scripts": {
  "my-build": "node run",
  "vumper": "node node_modules/vumper/index.js",
  "format": "prettier --single-quote -
},
...

运行my-build脚本:

根据解决方案1,要my-build通过CLI 调用,您需要运行:

npm run my-build -- dv

说明:

run.js利用process.argv以获得通过CLI(例如传入的参数dv).如果在运行npm run my-build默认值时没有提供参数,则(即dv)将传递给vumpernpm-script.

run.js 还利用child_process.execSync(...)壳出 /调用两个npm run命令.


我实施了解决方案1,效果很好
推荐阅读
  • MySQL5.6.40在CentOS764下安装过程 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 修复安装win10失败并提示“磁盘布局不受UEFI固件支持”的方法
    本文介绍了修复安装win10失败并提示“磁盘布局不受UEFI固件支持”的方法。首先解释了UEFI的概念和作用,然后提供了两种解决方法。第一种方法是在bios界面中将Boot Mode设置为Legacy Support,Boot Priority设置为Legacy First,并关闭UEFI。第二种方法是使用U盘启动盘进入PE系统,运行磁盘分区工具DiskGenius,将硬盘的分区表设置为gpt格式,并留出288MB的内存。最后,通过运行界面输入命令cmd来完成设置。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • PL2303HXD电路图(USB转UART)介绍及应用
    本文介绍了PL2303HXD电路图(USB转UART)的特性和应用,该电路图可以实现RS232和USB信号的转换,方便嵌入到手持设备中。PL2303HXD作为USB/RS232双向转换器,可以将USB数据转换为RS232信息流格式发送给外设,并将RS232外设的数据转换为USB数据格式传送回主机。通过利用USB块传输模式和自动流量控制,PL2303HXD能够实现更高的数据传输吞吐量比传统的UART端口。 ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
  • 其实之前也有下载过完整的android源码,但是从来没有对这个做过一些总结,在加上最近需要经常去看,索性就在从新下载,编译一下,其实这些东西官网上面都有。http:sou ... [详细]
  • macOS命令行创建Android模拟器
    macOS下不安装AndroidStudio使用VSCode来开发Flutter应用使用命令行创建和管理Android模拟器设备avdmanageravdmanager 是一种命令 ... [详细]
  • python怎么关闭红线提示_手把手教你安装Python开发环境
    Python在window环境下安装图解1、下载最新版本Windows的Python开发64位安装包目前最新版本是Python-3.7.22、下载完成后,获取安装包& ... [详细]
  • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
  • 我创建了一个SSH密钥,当我以admin身份在GitBash中运行ssh-Tgit@gitlab.com时,我得到W ... [详细]
  • 安卓及谷歌官网不容易上,在此整理好下载地址,这样就可以直接用迅雷下载了。Eclipse最新Mars版Eclipse(暂时还没被墙)Mac版:http:www.eclipse.org ... [详细]
author-avatar
castellaniygw_623
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有