Yargs快速入门

2021-04-21  本文已影响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里注入参数(类似于对象合并)

上一篇下一篇

猜你喜欢

热点阅读