bat 命令返回结果_前端Node全局命令行开发工具利器——commander用法详解

之前的一篇文章前端如何写一个全局命令行?主要聊了如何写一个全局命令行以及介绍了一个辅助工具——yargs,这篇文章我们来聊聊另外一个命令行工具——commander!

初始化

e4811562498a6435cf9a1d1932ae380f.png

图1

首先要引入commander,parse方法用来解析命令行中传入的参数,和yargs类似,中间加入一个显示版本号的功能,我们运行一下:

79d10d37b2d737756938c9ee5c113ccb.png

图2

图2中打印的版本号符合预期,很好,下面我们可以继续向代码中添加其他逻辑!

选项option

使用格式如下:

.option('-n, --name  [p2]', '描述', '默认值')
  • n和name分别是短长定义(可以认为n是name的简写);
  • p代表选项后面跟着的参数,< >必填,[ ]选填;
  • 最后两个参数分别是描述文案和选项的默认值;
7b708c8f985988bdfce642f6034be457.png

图3

如图3所示,添加了一个debug选项,运行结果如下:

00fb2feea272e4b82b755971cc3452df.png

图4

如上图,无论是加-d还是--debug选项,结果都会打印true,如果不加选项就会打印undefined。下面我们就加一下默认值,看看会发生什么?

c2e2ca17a393b2a83e15973b6a433f77.png

图5

我们再运行一下,结果如下:

6730a6b4a9f39e4499b8dcc0f7600ebb.png

图6

如上图,你会发现加了默认值之后,打印出来的不再是布尔值,而是用户添加的默认值,但是不加选项打印出来的依然是underfined!

我们再把参数放在选项之后看看是什么效果?

66268b00cd8ecb2d2d9a659aef633044.png

图7

运行一下:

20e0d3942aa47c94f83b112d526a5134.png

图8

如图8所示,你会发现添加了可选参数之后,如果运行时不加选项也依然能够打印出默认值。下面我们换成必填参数看看是什么效果?

96eddadae047760eb372c6a9c12d8b0e.png

图9

如图9所示,不加选项输出没有任何问题,加了选项没有跟参数就会报错,报错的message也很明确,就是告诉你缺少参数,那么-d后面再跟一个参数就没问题了!

option可以链式添加多个,如下:

e8f12c74f4f67585888e557aca094551.png

图10

用 -nd 运行命令等价于 -n -d,如下:

a6e015810e1e08aa0d0a8cc1d6742fab.png

图11

如果在选项前面加上 no- ,含义正好与之前相反,效果如下:

f1784ab0d1eb76be36c381df07671246.png

图12

运行一下:

b6725af3c39e5816399e2c7bdc870c9b.png

图13

不加-d选项输出了true,加了反而输出了false,在某些场景下还是很有用的!

options的第三个参数还可以是函数(此时第四个值就是默认值),此函数接受两个参数:命令行输入的值和选项默认值,函数处理后的返回结果为最终的解析结果,看下面例子:

e31f149c24c07ea45b9dcd9d531d32ee.png

图14

运行一下,结果如下:

f82e584e318772d30371b5631e92226b.png

图15

如图15所示,如果不加选项返回的是默认值,如果加了选项和参数,那么就会进入函数中经过一番处理返回最终的结果!

命令command第一种用法(Action handler (sub)commands)

使用格式

.command('add  [params]').description('描述').alias('简称').action(function(){ }) //命令处理函数

看一个例子:

219ae91365bf29de270dd728f94fa46f.png

图16

和option一样,< >和[ ]分别代表必填和选填,图16中有三个点的写法表示剩余的参数都放在other这个数组里面,类似于es6中的语法。

action处理函数的参数与命令中的参数一一对应,但是最后一个参数有所不同,通过最后一个参数cmdObj可以获取option对应的输入值。

运行一下,如图17所示:

7ecc9f9b9c812599b8b4ecaaaf7ec9de.png

图17

第一种写法比较简单,我想大家一看就会明白!

命令command第二种用法(Git-style executable (sub)commands)

使用格式

.command('add  [params]', 'install description', opts)
  • 第二个参数是描述
  • 第三个参数是命令辅助修饰对象(可选)
  • 当 .command() 带有描述参数时,不能采用 .action(callback) 来处理子命令,否则会出错,这告诉 commander,你将采用单独的可执行文件作为子命令。
ef2d54fd35703228fb20897f530fe290.png

图18

我们运行一下图18,结果如下:

2cad3f619d375604f3af056597aa67ef.png

图19

报错了,提示我们commder-init不存在,其实是commander在运行目录下寻找名为commder-init的文件没有找到导致的,我们现在添加一个这样的文件:

21af3fbcf0ec757b77520cba9010c8ff.png

图20

再次运行一下:

c66c3e180ff3a45c99157213e57b973a.png

图21

结果是符合预期的,非常好!

参数arguments

直接看一个例子便会明白:

d87c28710037d4a7801a6e179656672b.png

图22

运行一下:

e74f41fac3e24120070f066b93e6de9b.png

图23

如图23所示,不需要加任何命令就能进入action处理函数,如果你写的命令行只有一个命令,那么你可以采取这种方式!

用法帮助文档输出

在命令后面加-h或者--help就会默认输出一段说明,如下:

fd115a58957b61f1238aef287e6079cd.png

图24

如果觉得用法说明不够详细,可以监听--help事件,如下:

program.on('--help', function() { console.log('这里写你的用法说明文档');});

再运行上面的命令就会执行--help的回调内容

如果想修改图24中红色区域的内容可以使用下面的格式:

program .name("命令名称") //commder .usage("选项参数顺序说明") // [options] [command]

总结

这篇文章主要介绍了commander的用法,帮助大家可以更好的写一个全局命令行。另外如果大家自己去看文档的话,要注意文档中的一些方法和参数已经不存在了,可能是版本更新了但是README还没来得及更新造成的!个人感觉它和yargs的很多功能都很类似,其实它两在npm托管平台上周下载量差不多,大家根据自己的口味自行选择吧!

喜欢我的文章就关注我吧,后续会更多干货输出,让我们一起学习,共同成长!(希望收藏之前大家关注一波-_-)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值