安装
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里注入参数(类似于对象合并)
网友评论