yargs基本用法是用来解析process.argv的
基本用法:
require('yargs').argv //不需要配置,yargs会自动全力解析process.argv
手动传参:
require('yargs')(['-x', '1', '-y', '2']).argv //或者 require('yargs').parse(['-x', '1', '-y', '2']); //以上是等价的。 //如果直接调用require('yargs').parse();会默认解析 process.argvss
获取arguments做为一个普通的对象
Arguments之中没有对应的标识的 会展示到 argv._这个数组中
脚本的名字或者node命令可以用 argv.$0取到,这个用法与$0在bash和perl中一样
//demo.js console.log( require('yargs').argv ); //执行: node demo.js //结果: { _: [], '$0': 'demo.js' } //执行: node demo.js abc //结果: { _: [ 'a', 'b', 'c' ], '$0': 'demo.js' } //执行: node demo.js --name=hello //结果: { _: [], name: 'hello', '$0': 'demo.js' }
别名:.alias(key, alias);
const yargs = require('yargs'); //使用方法: yargs.alias('help', 'h'); yargs.alist('yargs', 'y'); //或者 yargs.alias({ help: 'h', yargs: 'y' })
alias案例:
//demo.js const yargs = require('yargs'); yargs.alias({ 'help': 'c', //这里是故意把help简写成c的,避免万一什么默认值之类的情况 'show': 's' }) console.log( yargs.argv ); //执行: node demo.js -c //结果: Options: // --help, -c Show help [boolean] // --version Show version number [boolean] //执行: node demo.js -s=hello //结果: { _: [], s: 'hello', show: 'hello', '$0': 'demo.js' }
.array(key)
告知解析器把key做为一个数组.
如果设置: .array('foo')
参数:--foo foo bar这会被解析成: {foo: ['foo', 'bar'] }
如果被多次调用,会自动做合并处理
参数:--foo foo --foo bar这会被解析成: {foo: ['foo', 'bar'] }
使用 -- 可以停止之后的参数加入到数组中
参数:--foo foo bar -- val 这会被解析成: {foo: ['foo', 'bar']}
.boolean(key)
把一个key定义为布尔类型,默认为true(这里官网上api写,设置boolean(key)这个方法之后key会默认为false,但是我亲测是默认true),
这里可以用 .default(key, undefined);这个方法来修改默认值
加--on-这个前缀也可以改为默认值是false
//执行: node demo.js -a //结果: { _: [], a: true, '$0': 'demo.js' } //执行: node demo.js --no-a //结果: { _: [], a: false, '$0': 'demo.js' }
.check(fn, [global=true])
//检查arguments中是否存在已知的情况
//fn被调用的时候会有两个参数,第一个就是argv,第二个是个数组,代表参数的选项和别名
//如果fn返回代表负的值或者抛出错误,就会显示错误和使用信息,并退出
//global表明check是否能在一级命令和次级命令起作用
.choices(key, choices); 设置某个key的可选值
//demo.js var argv = require('yargs') .alias('i', 'ingredient') .describe('i', 'choose your sandwich ingredients') .choices('i', ['peanut-butter', 'jelly', 'banana', 'pickles']) .help('help') .argv; console.log(argv); //执行: node demo.js -i jelly //结果:{ _: [], i: 'jelly', ingredient: 'jelly', '$0': 'demo.js' } //如果被调用多次,所有的值会被合并到一起
.coerce(key, fn)
这个方法是同步调用,用来转义命令行传入的值
这个fn会接收一个参数,参数来源是命令行key对应的值
并且必须要返回一个值或者抛出一个错误
//demo.js var argv = require('yargs') .coerce('file', function (arg) { return require('fs').readFileSync(arg, 'utf8') }) .argv //也可以用map的方法同时设置多个key的转义方法 //demo.js var argv = require('yargs') .coerce({ date: Date.parse, json: JSON.parse }) .argv //执行: node demo.js --json="{"a":"b"}" //结果: { _: [], json: '{"a":"b"}', '$0': 'demo.js' } //可以看到json的结果转化成了对象 //也可以对不同的key执行相同的转义 var path = require('path') var argv = require('yargs') .coerce(['src', 'dest'], path.resolve) .argv
如果使用对象属性的方式来转义
// --user.name Batman --user.password 123 // gives us: {name: 'batman', password: '[SECRET]'} var argv = require('yargs') .option('user') .coerce('user', opt => { opt.name = opt.name.toLowerCase() opt.password = '[SECRET]' return opt }) .argv