这里用到的是 commander 这个库。它的文档地址是:https://www.npmjs.com/package/commander

请先看下面代码:

const program = require("commander");
// 分为2种操作, 2种操作互相冲突
// Options 操作
program
    .version("0.0.1")
    .option("-t, --types [type]", "test options")
    // option这句话必须加
    .parse(process.argv);
// Commands 操作
program
    // 命令与参数: <> 必填; [] 选填
    .command("exec <cmd> [env]")
    // 别名
    .alias("ex")
    // 帮助信息
    .description("execute the given remote cmd")
    // 没用,option和command是冲突的
    .option("-e, --exec_mode <mode>", "Which exec mode to use")
    // 执行的操作
    .action((cmd, env, options) => {
        // 参数可以拿到
        console.log(`env is ${env}`);
        console.log('exec "%s" using %s mode', cmd, options.exec_mode);
    })
    // 自定义help信息
    .on("--help", function() {
        console.log("自定义help信息");
    });
// 参数长度不够, 打印帮助信息
if (!process.argv.slice(2).length) {
    program.outputHelp();
}
if (program.types) {
    console.log(program.types);
}
// 解析命令行参数
program.parse(process.argv);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

文档上基本都写明白了,但是有几个需要注意的点:

  1. 它主要提供 options 和 commands 两种操作,option 就是形如“-t,--types”这样的传参,commands 就是形如“exec”这样的传参。 不要混用两者 。
  2. 读取 commands 中传入的参数,写在 .action  中;读取 options 传入的参数,是通过访问 program  上的变量。除此之外,options 操作需要执行  .parse(process.argv) 解析命令行参数
  3. -V  和 -h  默认也是提供的,但是也可以通过自定义覆盖
  4. 一般都把 options 写在前面, 顺便标识版本号 ;把 commands 写在后面;最后会判断一下参数长度,不够会自动输出打印信息
来自: Node.js 交互式命令行-参数读取 | 心谭博客
作者:心谭
Star仓库:github