yargs基本使用(Yargs basic use)

#!/usr/bin/env node

const yargs = require('yargs/yargs')
const dedent = require('dedent') // 处理缩进
const pkg = require('../package.json')

const cli = yargs()
const argv = process.argv.slice(2)

const context = {
  xiebenyinVersion: pkg.version
}

cli
  .usage('使用: xiebenyin-test [command] <options>')
  .demandCommand(1, '最少输入一个command或options') // 限制最少输入1个选项或命令
  .strict() // 无法识别的命令会报错
  .recommendCommands() // 输入无法识别的命令会提示存在的命令
  .fail((msg, err) => { // 捕获错误
    console.log(msg)
  })
  .alias('h', 'help') // 选项添加别名
  .alias('v', 'version')
  .wrap(cli.terminalWidth()) // 命令行交互宽度
  .epilogue(dedent`  欢迎使用 xiebenyin 脚手架
  命令[command] 选项[options]`) // 命令行底部内容
  .option({ // 添加一个全局 options
    debug: {
      type: 'boolean',
      describe: '使用 debug 模式', // 描述
      alias: 'd', //别名
    }
  })
  .option('registry', {
    type: 'string',
    describe: '默认全局注册',
    alias: 'r',
    // hidden: true, // 隐藏 option
  })
  .group(['debug'], '开发选项') // option分组
  .group(['registry'], '发布选项')
  // command 命令
  .command('init [name]', '初始化项目', (yargs) => {
    // builder 函数
    yargs
      .option('name', { // 给 init 命令添加一个 option 选项
        type: 'string',
        describe: '项目名称',
        alias: 'n'
      })
  }, argv => {
    // 执行命令需要做的逻辑
    console.log(argv)
  })
  .command({ // 添加一个 list 命令
    command: 'list',
    aliases: ['ls', 'la', 'll'], // 别名
    describe: '显示所有包',
    builder: yargs => {
      // 执行命令之前的逻辑 可以在这里给命令添加 option 选项
    },
    handler: argv => {
      // 执行命令的逻辑
      console.log(argv)
    }
  })
  .parse(argv, context) // 解析参数 (argv会和context合并)
————————
#!/usr/bin/env node

const yargs = require('yargs/yargs')
const dedent = require('dedent') // 处理缩进
const pkg = require('../package.json')

const cli = yargs()
const argv = process.argv.slice(2)

const context = {
  xiebenyinVersion: pkg.version
}

cli
  .usage('使用: xiebenyin-test [command] <options>')
  .demandCommand(1, '最少输入一个command或options') // 限制最少输入1个选项或命令
  .strict() // 无法识别的命令会报错
  .recommendCommands() // 输入无法识别的命令会提示存在的命令
  .fail((msg, err) => { // 捕获错误
    console.log(msg)
  })
  .alias('h', 'help') // 选项添加别名
  .alias('v', 'version')
  .wrap(cli.terminalWidth()) // 命令行交互宽度
  .epilogue(dedent`  欢迎使用 xiebenyin 脚手架
  命令[command] 选项[options]`) // 命令行底部内容
  .option({ // 添加一个全局 options
    debug: {
      type: 'boolean',
      describe: '使用 debug 模式', // 描述
      alias: 'd', //别名
    }
  })
  .option('registry', {
    type: 'string',
    describe: '默认全局注册',
    alias: 'r',
    // hidden: true, // 隐藏 option
  })
  .group(['debug'], '开发选项') // option分组
  .group(['registry'], '发布选项')
  // command 命令
  .command('init [name]', '初始化项目', (yargs) => {
    // builder 函数
    yargs
      .option('name', { // 给 init 命令添加一个 option 选项
        type: 'string',
        describe: '项目名称',
        alias: 'n'
      })
  }, argv => {
    // 执行命令需要做的逻辑
    console.log(argv)
  })
  .command({ // 添加一个 list 命令
    command: 'list',
    aliases: ['ls', 'la', 'll'], // 别名
    describe: '显示所有包',
    builder: yargs => {
      // 执行命令之前的逻辑 可以在这里给命令添加 option 选项
    },
    handler: argv => {
      // 执行命令的逻辑
      console.log(argv)
    }
  })
  .parse(argv, context) // 解析参数 (argv会和context合并)