Необязательный аргумент для опции с яргами - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь создать интерфейс командной строки с помощью yargs, где один параметр принимает (необязательный!) Аргумент:

const cli = yargs
.array('keyword')
.option('keyword', {
    alias: 'k',
    type: 'string',
    describe: 'add additional keyword or clear previous keywords without an argument'
)
.argv;

Другими словами, использование program --keyword --keyword=this --keyword=that допускается.

Как я могу сказать яргам принять опцию --keyword с опцией или без нее?

1 Ответ

0 голосов
/ 25 апреля 2020

Оказывается, что yargs всегда будет принимать пустые аргументы опций. Поведение отличается в зависимости от того, является ли опция опцией массива или нет.

Если вы запускаете programm --keyword --keyword=this --keyword=that и определяете свои параметры следующим образом:

const cli = yargs
.array('keyword')
.option('keyword', {
    alias: 'k',
    type: 'string',

})
.argv;
console.log(yargs)

Вы получаете следующие выходные данные:

{
  _: [],
  keyword: [ 'this', 'that' ],
  k: [ 'this', 'that' ],
  '$0': 'bin/program.js'
}

Опция без аргумента просто игнорируется, что, скорее всего, не то, что вам нужно.

Без array:

const cli = yargs
.option('keyword', {
    alias: 'k',
    type: 'string',

})
.argv;
console.log(yargs)

Вы получите следующий вывод:

{
  _: [],
  keyword: [ '', 'this', 'that' ],
  k: [ '', 'this', 'that' ],
  '$0': 'bin/program.js'
}

Это означает, что пустой аргумент сохраняется в результате.

...