yargs говорит, что вложенные аргументы, предоставленные через JSON, «отсутствуют»

#javascript #node.js #yargs

#javascript #node.js #yargs

Вопрос:

Используя yargs 16.2.0, я определил некоторые вложенные параметры и предоставил их через конфигурационный файл, но yargs по-прежнему утверждает, что они отсутствуют:

yargs

 yargs
  .command('do-stuff', 'Does some neat stuff.', o => o
    .option('test.something', {
      type: 'string',
      demandOption: true,
      requiresArg: true,
    })
  )
  .strict()
  .demandCommand()
  .config('env')
  .help()
  .argv;
 

config.json

 {
  "test": {
    "something": "blah"
  }
}
 

Выполняется через …

 > node index.js -- do-stuff --env config.json

index.js do-stu

Does some neat stuff.

Options:
  --version         Show version number                                [boolean]
  --env             Path to the environment config JSON from which to load
                    arguments.
  --help            Show help                                          [boolean]
  --test.something                                           [string] [required]

Missing required argument: test.something
 

Затем я отредактировал node_modules/yargs-parser/build/index.cjs (оригинал здесь) и добавил строку для выхода из argv системы после анализа конфигурационного JSON:

 setConfigObject(config);            // line 630, existing
console.log(JSON.stringify(argv));  // added for debugging
 

Результирующий вывод:

 {
    "_": ["do-stuff"],
    "env": "config.json",
    "test":
    {
        "something": "blah"
    }
}
 

Я внес то же самое изменение в node_modules/yargs/build/index.cjs , после строки 1472 (непосредственно перед отображением сообщения «Отсутствуют требуемые аргументы», и вывод JSON по-прежнему включает test.something аргумент.


Итак, почему yargs утверждает, что мои аргументы не были предоставлены, когда даже argv показывает, что они были?

Комментарии:

1. Если еще немного разобраться в коде, то, скорее всего, это просто ошибка или неподдерживаемый вариант использования.

Ответ №1:

Это ошибка или неподдерживаемый вариант использования в yargs: https://github.com/yargs/yargs/issues/1782