梗概:

yargs 模块能够解决如何处理命令行通过node运行脚本时所带的参数。

语法:

1. argv对象:

1.1. 梗概:

储存命令行参数的主要对象

1.2. 属性:

1.3. 某个字符串属性:

argv.参数名储存着--参数名 实参的实参

说明:

如果传入空实参, 则值为true

实例:
#!/usr/bin/env node
var argv = require('yargs').argv;
console.log('hello ', argv.name);

使用时,下面两种用法都可以。

$ hello --name=tom
hello tom
 
$ hello --name tom
hello tom

1.3. 某个单字符的属性:

argv.单字符的参数储存着-单字符参数 实参的实参。

1.4. _属性:

argv 对象有一个下划线(_ )属性,可以获取非连词线开头的参数。

说明:

如果传入空实参, 则值为true

实例:
#!/usr/bin/env node
var argv = require('yargs').argv;
console.log('hello ', argv.n);
console.log(argv._);

用法如下。

$ hello A -n tom B C
hello  tom
[ 'A', 'B', 'C' ]

2. 命令行参数的配置

给option方法提供的配置对象中, 有以下属性:

  • alias: 指定别名
  • demand:是否必选
  • default:默认值
  • describe:提示
  • boolean: 是否设置某个参数为开关, 而不接受实参

2.1. 实例:

options 方法允许将所有配置写进一个对象。

 
#!/usr/bin/env node
var argv = require('yargs')
.option('n', {
alias : 'name',//argv.name和argv.n的值是相等的
demand: true,
default: false,
describe: 'your name',
type: 'string',
boolean: true,//设置为一个开关
})
.argv;
 
console.log('hello ', argv.n);

上面代码指定 n 参数不可省略,且是一个开关,默认值为 false,并给出一行提示。

3. 八、子命令

yargs 模块还允许通过 command 方法,设置 Git 风格的子命令。

 
#!/usr/bin/env node
var argv = require('yargs')
.command("morning", "good morning", function (yargs) {
console.log("Good Morning");
})
.command("evening", "good evening", function (yargs) {
console.log("Good Evening");
})
.argv;
 
console.log('hello ', argv.n);

用法如下。

 
$ hello morning -n tom
Good Morning
hello tom

可以将这个功能与 shellojs 模块结合起来。

 
#!/usr/bin/env node
require('shelljs/global');
var argv = require('yargs')
.command("morning", "good morning", function (yargs) {
echo("Good Morning");
})
.command("evening", "good evening", function (yargs) {
echo("Good Evening");
})
.argv;
 
console.log('hello ', argv.n);

每个子命令往往有自己的参数,这时就需要在回调函数中单独指定。回调函数中,要先用 reset 方法重置 yargs 对象。

 
#!/usr/bin/env node
require('shelljs/global');
var argv = require('yargs')
.command("morning", "good morning", function (yargs) {  
echo("Good Morning");
var argv = yargs.reset()
.option("m", {
alias: "message",
description: "provide any sentence"
})
.help("h")
.alias("h", "help")
.argv;
 
echo(argv.m);
})
.argv;

用法如下。

 
$ hello morning -m "Are you hungry?"
Good Morning
Are you hungry?