zoukankan      html  css  js  c++  java
  • 一、yargs用法

    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
  • 相关阅读:
    Go通过闭包避免程序运行崩溃
    占个坑
    Go多核并行
    一个计划
    python入门:模拟简单用户登录(自写)
    python入门:if、elif、else 条件语句的基本用法
    python入门:if和else的基本用法
    python入门:print打印输出的用法
    python入门:最基本的用户登录
    Python入门:Python基础笔记
  • 原文地址:https://www.cnblogs.com/hellolol/p/11463412.html
Copyright © 2011-2022 走看看