记录一下Node中的命令行工具:Commander js ,它是完整的 node.js 命令行解决方案
一. 安装
yarn add commander
二. 使用
实现一个最基本的命令行:
// index.js
const { program } = require('commander');
program.version('0.0.1');
program
.option('-d, --debug', 'output extra debugging')
.option('-s, --small', 'small pizza size')
.option('-p, --pizza-type <type>', 'flavour of pizza');
program.parse(process.argv);
从commander引入一个全局对象program。它可以添加选项:option
1. option 选项
Commander 使用.option() 方法来定义选项,同时可以附加选项的简介。每个选项可以定义一个短选项名称(-后面接单个字符)和一个长选项名称(--后面接一个或多个单词),使用逗号、空格或|分隔。通过program.parse(arguments)方法处理参数。
在终端用node启动index.js:node index (node默认会解析成js文件),结果是没有东西打印出来,但是这个文件确实被执行了。
node index -h :
可以看到,列出了我们定义的选项,-h是默认给加的。
如果在index.js里打印出这些选项的值:
console.log(program.version)
console.log(program.debug)
那么必须给传这个选项,它才会有值,否则就是undefined
node index -d : 打印出的program.debug的值就是true
2. command 命令
通过.command()可以配置命令,有两种实现方式:为命令绑定处理函数,或者将命令单独写成一个可执行文件。
//index.js
const { program } = require('commander');
program.version('0.0.1');
program
.option('-x, --xxx', 'this is x')
program
.command('add <taskName> [可选]')
.description('add a task')
.action((source, destination) => {
console.log('添加了一个任务');
});
program.parse(process.argv);
.command()的第一个参数可以配置命令名称及参数,参数有必选、可选。
.description() 就是这个命令的描述
.action() 是这个命令的回调函数。
现在我们在终端执行:node index -h :可以显示选项和命令
现在执行一下这个命令吧:node index add buy
那么.action()里的回调的参数是什么呢?我们打出来看一下:
//index.js
program
.command('add <taskName>')
.description('add a task')
.action((x) => {
console.log(x);
});
node index add buy :控制台输出了 buy
所以这个回调的参数就是命令名称后边跟着的参数。
3. process.argv
process.argv 就是我们输入的参数:
比如在node 程序cli.js中打印:console.log(process.argv)
如果我在终端输入以下命令:node cli clear 程序运行结果是这样的:
第一个参数是node ,第二个参数是运行的文件路径,第三个参数才是我们真正传的参数。