npargv

process argv parser

Usage no npm install needed!

<script type="module">
  import npargv from 'https://cdn.skypack.dev/npargv';
</script>

README

npargv 解析进程的参数

Node.js扩展,用于快速解析process.argv。

安装

npm i npargv

使用示例


'use strict'

const parseArgv = require('npargv')

let ret = parseArgv({
  '--port=' : {
    name: 'port',
    type: 'int',
    min: 2000,
    max: 2100
  },

  '--host=' : {
    name: 'host',
    match: /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/i
  },

  '-w' : {
    name: 'worker',
    type: 'int',
    min: 1,
    max: 4,
    //若设置了默认值,则在参数不合法时会自动使用默认值不会返回错误信息。
    default: 2
  },

  '--https': {
    name: 'https'
  },

  '--http2': {
    name: 'http2'
  },

  '--test': {
    name: 'test'
  },

  '--id' : {
    name : 'id',
    callback: (str) => {
      return str.split(',').filter(p => p.length > 0)
    }
  },

  //自动转换为{type: 'bool', name: 'limit'}
  '--limit' : 'limit',

  //自动转换为{type: 'bool', name: '-x'}
  '-x' : false

})

console.log(ret)

运行命令参数:

$ node test.js --host=1.2.3.4 --https --http2 --test --port=2010 --id 1,2,3,4,5 --local

运行输出结果:

{
  ok: true,
  errmsg: '',
  args: {
    worker: 2,
    https: true,
    http2: true,
    test: true,
    limit: false,
    host: '1.2.3.4',
    port: 2010,
    id: [ '1', '2', '3', '4', '5' ],
    '--local': true,
    '-x': false
  }
}

解析后的结果,若ok为false,则errmsg会给出错误提示信息。若参数无错误,则args是解析后的参数对象。

解析过程中,若参数不在传递的对象描述信息内,仍然会在args中体现,key值即为参数的名字,可以参考示例中的--local。

如果对参数的描述信息不是object类型,则会转换为boolean类型,此时name值即为参数的名字。参考-x参数。

若没有给定type限定范围,则会根据描述自动设定type,这可能会有错误判断,所以尽可能给定type限定。

type推断规则如下:

  • 若参数含有=,比如--port=,则type为string类型。

  • 否则,若描述对象具备match或callback,则为string类型。

  • 否则,若描述对象含有min或max则为int类型。

  • 否则,若描述对象具备default,则如果default是数字或字符串类型,type和default类型一致。

  • 否则,type为bool。

type支持类型如下:

  • int 或 number,整数类型。

  • float,浮点数类型。

  • string,字符串类型。

  • bool或boolean,布尔类型。

参数描述的选项

选项 是否必须 描述
type 参数类型,若不给定则会根据描述信息自动设定。
name 解析后参数的名字,就是解析后参数对象的key值。若不给定则使用参数名称。
min 限制最小值。
max 限制最大值。
default 默认值,若设置,则检测到传递的参数不合法,会采用默认值不会返回错误信息。对于bool来说,default无效。默认值为false。
match 正则表达式,若给定,会进行正则匹配。
callback 函数,若给定,会把参数值传递到函数,若函数返回值不是undefined,则作为最后解析的值。

autoDefault自动设定默认值

在程序解析过程中,有时候需要必须返回参数,不合法则使用默认值,这需要对每个选项都使用default属性,或者使用@autoDefault让npargv自动设定默认值。


'use strict'

const parseArgv = require('npargv')

let opts = {
  //启用自动设定默认值。
  '@autoDefault' : true,

  //没有设定默认值,会自动设定默认值为min的值。
  '--port' : {
    min: 1234,
    max: 5678
  },

  //没有default设定默认值,类型为数字也没有min的限制,会自动设置为0
  '-x' : {
    type : 'int'
  }


}

let {args} = parseArgv(opts)

自动设定默认值的规则:

  • 若type为bool则默认值为false

  • 若type为string,则默认值为 空字符串。

  • 若type为number、int、float,则默认值为min属性给定的值,若没有min则默认值为0。