一、yargs用法 - yargs API

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

 

posted on 2019-09-05 10:38  KyleLjc  阅读(1703)  评论(0编辑  收藏  举报

导航