Передача аргументов в программу Node.js - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь передать 2 обязательных аргумента для создаваемой мной программы Node.js.

Я использую Yargs, чтобы сделать это так:

const yarg = require("yargs")
.usage("hi")
.options("m", {demandOption: true})
.options("m2", {demandOption: true})
.argv;

Это отлично работает с небольшой проблемой. Я хочу активировать скрипт так:

узел index.js -m val -m2 val2

Это не работает, и я получаю сообщение о том, что m2 отсутствует. Только когда я добавляю еще один - перед m2, это работает, а это значит, что я должен сделать это так:

узел index.js -m val1 --m2 val2

Есть ли способ заставить его принимать аргументы так, как я хотел?

1 Ответ

0 голосов
/ 10 января 2019

Вы не можете делать то, что просите, с помощью яргов, и, вероятно, не следует. Легко понять, почему вы не можете увидеть, что yargs-parser (модуль yargs использует для анализа ваших аргументов) возвращает для различных стилей аргументов, которые вы упомянули:

console.log(yargsParser(['-m', 'A']));
console.log(yargsParser(['-m2', 'B']));
console.log(yargsParser(['--m2', 'C']));
<script src="https://bundle.run/yargs-parser@11.1.1"></script>

Как видите:

  1. -m A анализируется как опция m со значением A.
  2. -m2 B анализируется как опция m со значением 2 и, отдельно, параметром массива B.
  3. --m2 C анализируется как опция m2 со значением C.

Нет способа заставить парсер вести себя иначе. На это есть веские причины: большинство инструментов командной строки (несмотря на Windows) ведут себя так.

В соответствии с десятилетним соглашением, "длинные" опции используют две черты, за которыми следует удобочитаемое имя, например --max-count. «Короткие» параметры, которые часто являются псевдонимами для длинных, используют одну черту, за которой следует один символ, например -m, и - это ключевой бит - если параметр принимает значение, пробел между параметром и значение может быть опущено. Вот почему yargs видит -m2, он предполагает, что 2 является значением для опции m.

Если вы хотите использовать yargs (и не путать пользователей, разбирающихся в командной строке), вам нужно изменить параметры на 1. --m и --m2 или 2. -m и (например, ) -n.

...