передача строки с пробелами в узел cli-parser - PullRequest
1 голос
/ 12 марта 2020
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 и commander.

Это странно, потому что jest использует yargs, и jest принимает следующую команду : jest -t "test name with spaces"

1 Ответ

1 голос
/ 13 марта 2020

Исходя из вашего примера кода, проблема заключается в том, что вы подготовили массив строк, который разбил строку с пробелами до того, как синтаксический анализатор увидит ее:

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

Простое исправление, когда вручную установка аргументов состоит в том, чтобы создать массив параметров самостоятельно, вместо использования строки и split, например:

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

или

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

Если то, что вы нужно разбить одну строку на аргументы, как это делает оболочка, чего не делает Commander, или Yargs, или minimist.

Вы можете посмотреть на https://www.npmjs.com/package/shell-quote, который имеет команда разбора.

...