Как написать зависимость аргумента командной строки? - PullRequest
0 голосов
/ 21 апреля 2020

Я пишу программу командной строки в NodeJS, где мое текущее мышление заключается в том, что я хотел бы иметь синтаксический анализ аргументов и logi c в index.js, а затем иметь фактический код в функциях в отдельных файлах.

Проблема, с которой я столкнулся, заключается в том, как записать зависимости аргументов и конфликты. По какой-то причине cmd никогда не содержит аргументов. Работает только с --help.

Что я делаю не так? Как я могу внутри коммутатора проверить наличие или отсутствие других аргументов?

'use strict'
const minimist = require('minimist')

module.exports = () => {
  const args = minimist(process.argv.slice(2))

  let cmd = args._[0] || 'help'

  if (args.version || args.v) {
    console.log("Version 0.1")
    exit
  }

  if (args.help || args.h) {
    const help =
`
Usage: ddparser [OPTION]... [FILE]...
Parses DD toml files and updates a webpage accordingly.

  --help              Prints this help page
  --validate          Validates input file               [requires --input]
  --k1-dry-run        Print K1 changes without doing it  [requires --input] [conflicts with --k1-commit]
  --k1-commit         Commit k1 changes to website       [requires --k1-token] [conflicts with --k1-dry-run]
  --k1-token          K1 token                           [requires --k1-commit]
  --input             DD toml file to parse [required]

`
    console.log(help)
  }

  // all args below needs content from the toml file to work
  // should exit with error if config.toml isn't found

  switch (cmd) {
    case 'validate':
      // error if --input is not specified
      // error if any other argument is given
      // read config.toml
      // read --input toml file
      break

    case 'k1-dry-run':
      // error if --input is not specified
      // error if any other argument is given
      // run --validate first and error if it fails
      // read config.toml
      // read --input toml file
      break

    case 'k1-commit':
      // error if --input is not specified
      // error if --k1-token is not specified
      // run --validate first and error if it fails
      // read config.toml
      // read --input toml file
      break

    case 'k1-token':
      // error if --input is not specified
      // error if --k1-commit is not specified
      // this argument is just a dependency for other args
       break

    default:
      console.log('XXX is not a valid argument.')
      break
  }
}

1 Ответ

1 голос
/ 21 апреля 2020

С minimist:

argv._ содержит все аргументы, с которыми не связана опция.

Numeri c выглядящие аргументы будут возвращены в виде чисел, если для имени этого аргумента не установлено opts.string или opts.boolean.

Любые аргументы после '--' не будут проанализированы и в конечном итоге окажутся в argv._.

Таким образом, вместо вызова cmd.js --validate, назовите его как cmd.js validate, в противном случае вы можете сделать:

  let cmd = Object.keys(args).find(item => item !== '_') || 'help'

В качестве примечания вы делаете: exit вместо process.exit(), и вы получите:

ReferenceError: exit is not defined
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...