根据基础篇中的内容,我们已经可以创建一个简单的CLI 项目了,也配置了基本指令解析,但是还远远不够,在使用别人的CLI工具时,往往在指令后面还可以加上参数,比如--help
,--version
等常见指令。那么这些是如何解析的?
一、传参的本质
其本质是给node
执行环境传参,取参的过程。
在使用node命令执行文件时,如果需要参数我们直接写在文件名称的后面,比如node index.js param1 param2=aa
,这个就表示执行index.js
文件的时候同时传入了param1
和param2=aa
两个参数,而取参数则在index.js
中使用process.argv
去获取参数。
输出process.argv的内容如下,可见传入参数都可以在这里获取到
argv: [
'/usr/local/bin/node',
'/Users/Hansen/Desktop/Projects/Demo/index.js',
'param1',
'param2=aa'
],
这里的前两个参数是默认的,真正的参数从第三个开始。
注意这里的第一个参数,是node的执行环境,也就是第一篇文章中#!
后面写的环境。
二、传参的解析
实际开发CLI时,由于往往指令后的一些参数比较统一,比如都有--help
,--version
等,所以我们并不直接写参数解析,业内常用TJ大佬的库:Commander GitHub
2.1 安装
npm install commander
2.2 基础使用
index.js文件中代码如下
#!/usr/bin/env node
const { program } = require('commander');
program.version('0.0.1');
// 在最后写解析argv
program.parse(process.argv)
2.3 进阶使用
2.3.1> 参数缩写对于直接支持的参数设置的时候可以同时指定参数名称
program.version('0.0.1' , '-a, --b, -C');
// 实际上应当读取package.json的中的版本号作为这里的值
program.version(require('./package.json').version);
设置version
参数时,第二个参数添加 -a
--b
-C
作为命令的参数,这里作用为都是原来--version
的结果。但是这里如果设置了,则原来默认的会失效,这个方法默认是以-V, --version
作为参数(文档描述:This method auto-registers the "-V, --version" flag)。所以对于常用命令不建议重新设置其参数。
网友评论