Передача аргументов значения ключа из npm

Поэтому я борюсь с передачей аргументов параметров командной строки из 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

Я получил:

['ФОО', 'БАР']

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

$ npm run test FOO --BAR 99RedBalloons

Я получил:

['FOO', '99RedBallons']

а также

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

['ФОО']

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

Спасибо!


person Huckleberry Carignan    schedule 06.11.2018    source источник
comment
Вы пробовали запустить тест npm FOO Bar 99RedBallons?   -  person Mark    schedule 06.11.2018
comment
У меня есть, и это дает мне ['FOO', 'Bar', '99RedBalloons']   -  person Huckleberry Carignan    schedule 06.11.2018
comment
Для меня что-то странное, как npm передает аргументы командной строки скрипту node   -  person Huckleberry Carignan    schedule 06.11.2018
comment
Я думал, вам нужен точный результат, который вы говорите в своем комментарии и в конце своего вопроса.   -  person Mark    schedule 07.11.2018


Ответы (1)


Да, вы правы, согласно документации по 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' ]
person TGrif    schedule 06.11.2018