跳到主要内容

解析技巧

终止解析


使用 -- 停止解析标志,并将剩余部分放入 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' }