Передача аргументов значения ключа из npm - PullRequest
0 голосов
/ 06 ноября 2018

Так что я пытаюсь передать аргументы командной строки из npm в скрипт узла. Я могу передавать параметры самостоятельно, но не в виде пар ключ-значение.

Для моего package.json у меня есть:

"scripts": {
   "test": ". ./.env; node app.js --"
 },

(я понимаю, что для npm вам нужно включить и дополнительный "-" для передачи аргументов) и в моем app.js у меня есть:

const { argv, options } = require('yargs');
console.log(argv._);

Когда я бегу

$ npm run test FOO BAR

Я получаю:

['FOO', 'BAR']

отлично, это сработало, но если я попробую

$ npm run test FOO --BAR 99RedBalloons

Я получаю:

['FOO', '99RedBallons']

и

$ npm run test FOO --BAR = 99RedBallons дает мне:

['FOO']

Wha? Итак, мой вопрос на самом деле, используя "run npm <>" и я предполагаю, что yargs (так как я считаю, что это самый популярный пакет), как я могу получить arg._ of ["FOO", "Bar": " 99RedBalloons "].

Спасибо!

1 Ответ

0 голосов
/ 06 ноября 2018

Да, вы правы, согласно документации npm , вы должны передать дополнительный "-", чтобы указать аргументы скрипту npm , но вы не передадите его в правильное место.

Вам не нужно передавать его в конце вашего package.json «тестового» скрипта, но непосредственно в командной строке, которая вызывает вашего скрипта.

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

// cli
$ npm run test -- FOO --BAR 99RedBalloons    // "--" before arguments
  /* or */
$ npm run test -- FOO --BAR=99RedBalloons

// package.json
"scripts": {
   "test": ". ./.env; node app.js"
 }

// app.js
const { argv } = require('yargs');
console.log(argv);

// -> { _: [ 'FOO' ], BAR: '99RedBalloons', '$0': 'app.js' }

Я не нашел встроенной опции yargs , чтобы сделать это, но в качестве альтернативы, если вы хотите, чтобы все ваши аргументы были в переменной массива _, вы можете сделать что-то вроде этого:

for (let cmd in argv)
  if (cmd !== '$0' && cmd !== '_')
    argv._[cmd] = argv[cmd]

console.log(argv._)

// -> [ 'FOO', BAR: '99RedBalloons' ]
...