есть ли у яргов крюк, который я могу запустить перед каждой командой? - PullRequest
0 голосов
/ 15 декабря 2018

Мне нужно запустить некоторый код перед выполнением каждой команды, используя имя команды.Мне не удалось найти что-либо в документации API yargs.

В частности, я хочу удалить кэш, созданный каждой из моих команд.например команда foo, создает кэш в ./.tmp/foo.Я хочу удалить только этот кеш перед каждым его запуском.я могу удалить его из каждой команды обратного вызова, но любопытно, если есть более программный способ сделать это.

есть ли у Яргов какие-либо функции, которые я могу использовать для достижения этой цели?

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете использовать Промежуточное программное обеспечение , которое обеспечивает преобразование проанализированных аргументов перед выполнением команд.

                        --------------         --------------        ---------
stdin ----> argv ----> | Middleware 1 | ----> | Middleware 2 | ---> | Command |
                        --------------         --------------        ---------

Однако то же самое вы можете использовать для очистки кэша.

Пример промежуточного программного обеспечения

const { promisify } = require('util') // since node 8.0.0
const readFile = promisify(require('fs').readFile)

const normalizeCredentials = (argv) => {
  if (!argv.username || !argv.password) {
    return readFile('~/.credentials').then(data => JSON.parse(data))
  }
  return {}
}

// Add normalizeCredentials to yargs
yargs.middleware(normalizeCredentials)

// yargs parsing configuration
var argv = require('yargs')
  .usage('Usage: $0 <command> [options]')
  .command('login', 'Authenticate user', (yargs) =>{
        return yargs.option('username')
                    .option('password')
      } ,(argv) => {
        authenticateUser(argv.username, argv.password)
      },
      [normalizeCredentials]
     )
  .argv;
...