美文网首页
Yargs快速入门

Yargs快速入门

作者: 无懈可击 | 来源:发表于2021-04-21 23:06 被阅读0次

    安装

    cnpm i -S yargs

    最简单的yargs案例

    const yargs = require('yargs/yargs')
    // 对参数进行解析
    const { hideBin } = require('yargs/helpers')
    // 运行lio-imooc-test --help解析出 [ '--help' ]
    // lio-imooc-test --version输出package.json当前的版本
    // console.log(' =======>', hideBin(process.argv))
    
    const arg = hideBin(process.argv)
    
    yargs(arg)
        .argv
    

    基本用法和高级用法

    const yargs = require('yargs/yargs')
    // 对参数进行解析
    // const { hideBin } = require('yargs/helpers')
    // 页脚格式化插件
    const dedent = require('dedent')
    const pkg = require('../package.json')
    // 运行lio-imooc-test --help解析出 [ '--help' ]
    // lio-imooc-test --version输出package.json当前的版本
    // console.log(' =======>', hideBin(process.argv))
    
    // const arg = hideBin(process.argv)
    // const cli = yargs(arg)
    const cli = yargs()
    const argv = process.argv.slice(2)
    
    const context = {
        lioVersion: pkg.version
    }
    
    cli
        .usage('Usage:lio-imooc-test [command] <options>')// usage里的内容会打印在最前面
        .demandCommand(1, 'A command is required. Pass --help to see all available commands and options.最少要输入一个参数')// 最少要输入一个参数
        .strict()// 严格模式,如果输入命令是lio-imooc-test -h,会提示Unknown的错误信息;如果没有加,会没有任何的反馈
        .recommendCommands()// 错误纠正提示
        .fail((err, msg) => {// 错误提示
            console.log('err =======>', err)
            console.log('msg =======>', msg)
        })
        .alias('h', 'help')// 别名
        .alias('v', 'version')// 别名:可输入lio-imooc-test -v或lio-imooc-test --version
        .wrap(cli.terminalWidth())// 显示的宽度(撑满全屏)
        // .epilogue('hello hjy')// 页脚要显示的内容
        .epilogue(dedent`  111
    222`)// 内容顶格显示(去掉111前面的空格) 需安装:cnpm i -S dedent
        .options({// 对所有的command添加的options都有效
            debug: {// 添加debug命令
                type: 'boolean',
                describe: 'Bootstrap debug mode',
                alias: 'd'// 别名
            }
        })
        .option('ci', {
            type: 'string',
            describe: 'Define global registry',
            alias: 'r'// 别名
        })
        .group(['debug'], 'Dev Options:')// 把debug添加到Dev Options中
        .group(['registry'], 'Extra Options:')
        .command('init [name]', 'Do init a project', (yargs) => {// lio-imooc-test init -h
            yargs
                .option('name', {
                    type: 'string',
                    describe: 'Name of a project',
                    alias: 'n'
                })
        }, (argv) => {
            console.log(argv)
        })
        .command({// lio-imooc-test list
            command: 'list',
            aliases: ['ls', 'la', 'll'],
            describe: 'List local packages',
            builder: (yargs) => {
    
            },
            handler: (argv) => {
                // 执行顺序
                // start
                // end
                // chain1
                // chain2
                // chain3
                // chain4
                // setTimeout1
                // setTimeout2
                // chain5
    
                // EventLoop(javaScript事件循环)存在两种类型事件:宏任务、微任务
                console.log('start')
                setTimeout(() => {// 宏任务
                    console.log('setTimeout1')
                }, 0)
                new Promise(((resolve, reject) => { // 微任务
                    let chain = Promise.resolve()
                    chain.then(() => console.log('chain1'))
                    chain.then(() => console.log('chain2'))
                    chain.then(() => console.log('chain3'))
                }))
                let chain = Promise.resolve()
                chain.then(() => console.log('chain4'))
                setTimeout(() => {
                    console.log('setTimeout2')
                    let chain = Promise.resolve()
                    chain.then(() => console.log('chain5'))
                })
                console.log('end')
            }
        })
        .parse(argv, context)// parse可以往argv里注入参数(类似于对象合并)
    
    

    相关文章

      网友评论

          本文标题:Yargs快速入门

          本文链接:https://www.haomeiwen.com/subject/zdnfrltx.html