Как использовать команду. js команда через npm команду - PullRequest
2 голосов
/ 11 марта 2020

Я использую Commander. js команда, подобная этой ./index.js --project mono --type item --title newInvoice --comments 'Creates an invoice' --write, Теперь я использую команду через npm run item newInvoice, устанавливая некоторые параметры в package.json файле, подобном этому

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "snapshot": "node --max-old-space-size=10240 ./scripts/snapshot.js",
    "item": "./index.js --project mono --type item --title",
    "config": "./index.js --project mono --type config --title"
}

Но всякий раз, когда я пытаюсь получить параметр --write с npm, используя npm run item newInvoice --write, он показывает undefined для --write

Исходный код:

#!/usr/bin/env node
const fs = require('fs');
const program = require('commander');
require('colors');

program
  .version('0.1.0')
  .option('--project [project]', 'Specifies the project name', 'mono')
  .option('--type [type]', 'Type of code to generate, either "item" or "config"', /^(config|item)$/, 'config')
  .option('--title [title]', 'Title of the item or config', 'untitled')
  .option('--comments [comments]', 'Configs: describe the config', '@todo description/comments')
  .option('--write', 'Write the source code to a new file in the expected path')
  .option('--read', 'To see what would be written the source code to a new file in the expected path')
  .parse(process.argv);

console.log(program.write, program.read); //=> undefined undefined

Может кто-нибудь помогите мне, как использовать командир js команду с npm?

1 Ответ

1 голос
/ 12 марта 2020

Когда вы запускаете команду npm run, вам нужно использовать специальную опцию --, чтобы разграничить конец любой опции (опций), которая может принадлежать самой команде npm run (например, --silent) и начало аргумента (ов), которые должны быть переданы end сценария npm.

Вместо этого выполните следующую команду:

npm run item -- newInvoice --write

С учетом вышеупомянутой команды и команды, в настоящее время определяющей ваш npm скрипт с именем item, они по существу формируют следующую составную команду до выполнения:

./index.js --project mono --type item --title newInvoice --write
                                              ^          ^

Документация npm run гласит следующее:

Начиная с npm@2.0.0, вы можете использовать пользовательские аргументы при выполнении скриптов. Специальная опция -- используется getopt для определения конца опций. npm передаст все аргументы после -- непосредственно в ваш скрипт.

и его синтаксис использования определен в разделе Синопсис как:

npm run-script <command> [--silent] [-- <args>...]
                                     ^^

Примечание: Это , а не можно добавить опцию -- к самому сценарию npm.

...