1
var minimist = require("minimist")

const a = minimist(`executable --param "a b"`.split(' '))
console.log(a)

https://runkit.com/embed/57837xcuv5v0

实际输出:

Object {_: ["executable", "b\""], param: "\"a"}

预期输出:

Object {_: ["executable"], param: "a b"}


yargs使用and时我也看到了相同的结果commander

这很奇怪,因为jest正在使用yargs并开玩笑接受以下命令:jest -t "test name with spaces"

4

1 回答 1

1

根据您的示例代码,问题是您准备的字符串数组在解析器看到它之前已经分解了带空格的字符串:

$ node -e 'console.log(`executable --param "a b"`.split(" "))'
[ 'executable', '--param', '"a', 'b"' ]

手动设置参数时的一个简单修复是自己构造参数数组,而不是使用字符串 and split,例如:

$ node -e 'console.log(["executable", "--param", "a b"])'   
[ 'executable', '--param', 'a b' ]

或者

const a = minimist(['executable', '--param', 'a b'])

如果您需要做的是像 shell 那样将单个字符串分解为参数,那么 Commander、Yargs 或 minimist 不会这样做。

您可以查看具有解析命令的https://www.npmjs.com/package/shell-quote 。

于 2020-03-13T04:59:30.590 回答