解析技巧
终止解析
使用 --
停止解析标志,并将剩余部分放入 argv._
。
$ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4 { _: [ '-c', '3', '-d', '4' ], a: 1, b: 2, '$0': 'examples/reflect.js' }
指定布尔参数
如果您想显式将字段设置为 false,而不是只是将其未定义或覆盖默认值,请使用 --no-key
。
$ node examples/reflect.js -a --no-b { _: [], a: true, b: false, '$0': 'examples/reflect.js' }
数字
每个看起来像数字的参数都会被转化为数字。
这个默认行为可以通过调用 parserConfiguration()
来改变,或者显式的将你的选项指定为 string
。
数组
如果你指定过一个 flag 多次,经过解析后,将会变成一个包含所有值的数组。
$ node examples/reflect.js -x 5 -x 8 -x 0 { _: [], x: [ 5, 8, 0 ], '$0': 'examples/reflect.js' }
你也可以配置 options 类型为 array
,以支持 -x 5 6 7 8
这样的写法。
对象
当你在参数名中使用了 .
时,会假设存在一个隐式的对象路径。
这样可以让你把参数组织为一个可嵌套的对象。
$ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5 { _: [], foo: { bar: { baz: 33 }, quux: 5 }, '$0': 'examples/reflect.js' }
引号
当你使用包含 -
的字符串参数,这些参数会被 shell 理解为单独的选项,而不是字符串的一部分。问题是,像 bash 这样的 shell 的处理更倾向于剥离引号。所以解决方案是,使用两组引号来包裹字符串。
$ node examples/reflect.js --foo '"--hello -x=yes -v"'
{ _: [], foo: '--hello -x=yes -v',
'$0': 'examples/reflect.js' }
$ node examples/reflect.js --foo "\"--hello -x=yes -v\""
{ _: [], foo: '--hello -x=yes -v',
'$0': 'examples/reflect.js' }