Node-命令行Commander js

508 阅读2分钟

记录一下Node中的命令行工具:Commander js ,它是完整的 node.js 命令行解决方案

Commander github地址

一. 安装

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 ,第二个参数是运行的文件路径,第三个参数才是我们真正传的参数。