minimist轻量级的命令行参数解析引擎

nodejs的命令行参数解析工具有很多,比如:argparse、optimist、yars、commander。optimist和yargs内部使用的解析引擎正是minimist,如果你喜欢轻量级的技术,那么minimist足够简单好用,代码量也很少(只有几百行),非常适合研读。

minimist的特性比较全面:

  • short options
  • long options
  • Boolean 和 Number类型的自动转化
  • option alias

先看一下minimist整体的解析过程,代码大致是:

for (var i = 0; i < args.length; i++) {
    var arg = args[i];
    if (/^--.+=/.test(arg)) {
        ...
    } else if (/^--no-.+/.test(arg)) {
        ...
    } else if (/^--.+/.test(arg)) {
        ...
    } else if (/^-[^-]+/.test(arg)) {
        ...
    } else {
        ...
    }
}

解析过程中,minimist会依次匹配不同的模式,从long options到short options,匹配之后再进行相应的解析工作。

我们可以写一个简单地例子来试试minimist:

// test.js
var args = require('minimist')(process.argv.slice(2));
console.log(args.hello);
$ node test.js --hello=world
// world
$ node test.js --hello world
// world
$ node test.js --hello
// true 注意:不是空字符串而是true

从上面的例子可以看到,minimistoptimist一样会把参数解析成一个字典。但是最后一次的值与前两次不太一样。去掉 world 之后, hello 的值变成了 true 。一般情况下,如果参数后面没有跟着的 value 的话, minimist 会把参数的值解析成 true 。不过, minimist 在解析接口当中提供的 string 选项来修改上面的解析过程。 string 选项可以传入一个数组,数组中的参数会被一直解析成字符串。我们修改一下上面的 test.js

var args = require('minimist')(process.argv.slice(2){
    string: ["hello"]
});
console.log(args.hello);
$ node test.js --hello world
// world
$ node test.js --hello
// ""

在 string 选项当中添加了 hello 之后, hello 的值会一直解析成字符串,如果去掉了 world ,那么 hello 将解析成空字符串。

minimist 还支持 boolean 选项,与 string 选项相反,在 boolean 选项当中的参数,会被一直解析成 true 或 false ,比如下面的例子:

var args = require('minimist')(process.argv.slice(2){
    boolean: ["hello"]
});
console.log(args.hello);
console.log(args._);
$ node test.js --hello world
// true
// [ 'world' ]
$ node test.js
// false
// []

hello 将一直被解析成 true 或 false ,添加的 world 会保存到 args 的 _ 选项里面。

除了 string 和 boolean 以外, minimist 还提供了 default 和 alias 两个选项,分别用来设定默认值和 option alias 。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值