梗概:
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 tom1.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?