yargs使用

91 阅读2分钟
  • const {hideBin} = require('yargs/helpers') 用来解析参数

image.png

  • yargs(arg).argv

image.png

  • strict 显示报错信息,当输入一个不存在的命令 并且从已经定义的命令中找不到相似的命令,会给出报错

image.png

  • Usage 提示用法;demandCommand 推荐指令使用方式,当错误的时候 会提示

image.png

  • alias 给指定起别名

image.png

  • warp 用来控制终端输出的宽度; yargs(arg).terminalWidth()用来获取本地终端的宽度;100定义输出宽度是100

image.png

  • options 主要是给yargs对象增加一个全局的选项,可以定义多个 即对所有的command都有效,别名也可以通过图二的方式,推荐第一种

image.png

image.png

  • option 定义单个选项

image.png

  • group 对option 进行分组

image.png

  • 定义command

image.png

image.png 最后显示 '$0' 显示的是脚手架

  • command 定义的另外一种方式:对象

image.png

  • recommendCommands 当命令不存在的时候 会遍历已经存在的命令 有相似的命令 给出相应的提示 image.png
  • fail 可以使我们对错误命令 做定制化处理,即不满足demandRecommand方法的指令 都会落到fail处理

image.png

  • parse的使用
 const pkg = require('../package.json')
 const yargs = require('yargs/yargs');
 const {hideBin} = require('yargs/helpers')
 const arg = hideBin(process.argv) // 作用解析参数,用来获取process.argv第2个参数往后的数据
 console.log('----process',process.argv); // 打印的是数组
 console.log('----arg',arg);
 const context = {
    immocVersion:pkg.version
 }
 yargs(arg)
 .usage('Usage: immoc-petra2 [command] <options>')
 .demandCommand(1,'A command is required.Pass --help to see all available commands and options')
 .strict()
 .recommendCommands()
 .fail((err,msg)=> {
    console.log(err);
 })
 .alias('h','help')
 .alias('v','version')
//  .wrap(yargs(arg).terminalWidth())
//  .wrap(100)
 .epilogue('your own footer description')
 .options({
    debug: {
        type:'string',
        describe:'Bootstrap debug mode',
        alias:'d'
    }
 })
 .option('registry',{
    type:'string',
    describe:'define global registry',
    alias:'r'
 })
 .group(['debug'],'Dev Options:')
 .group(['registry'],'Extra Options:')
 .command('init [name]','Do init a project',(yargs)=> {
        return yargs.option('name',{
            type:'string',
            describe:'Name of a project',
            alias:'n'
        })
    },(argv)=> {
        console.log(argv);
    })
 .command({
    command:'list',
    aliases:['ls','ll','la'],
    describe:'List local Packages',
    builder:(yargs)=> {},
    handler:(argv)=> {
        console.log('-------------',argv);
    }
 })
 .argv

在终端执行 immoc-petra2 list -v; console对应的结果:
console.log('----process',process.argv); 
console.log('----arg',arg);
console.log('-------------',argv);

image.png

现在不使用const {hideBin} = require('yargs/helpers');const arg = hideBin(process.argv) 解析参数, 使用parse

const pkg = require('../package.json')
 const yargs = require('yargs/yargs');
 const {hideBin} = require('yargs/helpers')
 const arg = hideBin(process.argv)
 console.log('----process',process.argv);
 console.log('----arg',arg);
 const context = {
    immocVersion:pkg.version
 }
 
 // 此时不王yargs传递arg参数
 yargs()
 .usage('Usage: immoc-petra2 [command] <options>')
 .demandCommand(1,'A command is required.Pass --help to see all available commands and options')
 .strict()
 .recommendCommands()
 .fail((err,msg)=> {
    console.log(err);
 })
 .alias('h','help')
 .alias('v','version')
//  .wrap(yargs(arg).terminalWidth())
//  .wrap(100)
 .epilogue('your own footer description')
 .options({
    debug: {
        type:'string',
        describe:'Bootstrap debug mode',
        alias:'d'
    }
 })
 .option('registry',{
    type:'string',
    describe:'define global registry',
    alias:'r'
 })
 .group(['debug'],'Dev Options:')
 .group(['registry'],'Extra Options:')
 .command('init [name]','Do init a project',(yargs)=> {
        return yargs.option('name',{
            type:'string',
            describe:'Name of a project',
            alias:'n'
        })
    },(argv)=> {
        console.log(argv);
    })
 .command({
    command:'list',
    aliases:['ls','ll','la'],
    describe:'List local Packages',
    builder:(yargs)=> {},
    handler:(argv)=> {
        console.log('-------------',argv);
    }
 })
 .parse(process.argv.slice(2),context)

//  .argv

解析结果:

image.png

parse的好处 第一个参数和第二个参数合并 注入到当前的脚手架当中