# 十二.yargs
- yargs 模块能够解决如何处理命令行参数
# 1.可执行脚本
使用 JavaScript 语言编写一个可执行脚本
#!/usr/bin/env node
console.log('hello')
1
2
2
然后修改权限
chmod 755 hello
1
执行脚本
./hello
hello
1
2
2
如果想把路径去掉可以吧 hello 的路径加入环境变量 PATH。但是,另一种更好的做法是在当前目录下创建一个 package.json
{
"name": "hello",
"bin": {
"hello": "hello"
}
}
1
2
3
4
5
6
2
3
4
5
6
然后 npm link
npm link
1
在执行 hello 就不用输入路径了
hello
1
# 2.命令行参数的原始写法
命令行参数可以用系统变量process.env
获取
#! /usr/bin/env node
console.log('hello',process.argv[2])
1
2
2
hello zbc
process.env = ['node','hello','zbc']
1
2
2
# 3.新建进程
脚本可以通过child_process
模块新建子进程,从而执行linux
命令
// #!/usr/bin/env node
let name = process.argv[2]
let { exec } = require("child_process")
let child = exec("echo hello " + name, (err, stdout, stderr) => {
if (err) throw err
conosle.info(stdout)
})
1
2
3
4
5
6
7
2
3
4
5
6
7
hello zbc
1
# 4.yargs
yargs 模块能够解决如何处理命令行参数
# 4.1 安装
npm install yargs --save
1
# 4.2 读取命令行参数
yargs 模块提供了 argv 对象,用来读取命令行参数
// #!/usr/bin/env node
let argv = require("yargs").argv
console.log("hello", argv.name)
1
2
3
2
3
hello --name=zbc
hello --name=zbc
1
2
2
process.argv
['/usr/local/bin/node','/usr/local/bin/hello4','--name=zbc']
1
argv
{
"name": "zbc"
}
1
2
3
2
3
# 4.3 还可以指定别名
let argv = require("yargs").alias("n", "name").argv
1
hello -n zbc
hello --name zbc
1
2
2
# 4.4 下划线属性
argv 对象有一个下划线属性,可以获取非连词线开头的参数
let argv = require("yargs").argv
console.log("hello", argv.n)
console.log(argv._)
1
2
3
2
3
hello A -n zbc B C
hello zbc ['A','B','C']
1
2
2
# 4.5 命令行参数的配置
- demand 是否必选
- default 默认值
- describe 提示
// #!/usr/bin/env node
let argv = require("yargs")
.demand(["n"])
.default({ n: "zbc" })
.describe({ n: "你的名字" }).argv
console.log("hello", argv.n)
1
2
3
4
5
6
2
3
4
5
6
这个代表 n 不能省略,默认值为 zbc,并给出提示
option 方法允许将所有的配置写入配置对象
// #!/usr/bin/env node
let argv = require("yargs").option("n", {
alias: "name",
demand: true,
default: "zbc",
describe: "请输入你的名字",
type: "string",
boolean: true,
}).argv
console.log("hello", argv.n)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
有时候,某些参数不需要,只起到开关作用。可以用 boolean 指定这些参数返回布尔值
// #!/usr/bin/env node
let argv = require("yargs").boolen(["private"]).argv
console.log("hello", argv.n)
1
2
3
2
3
参数 private 总是返回一个布尔值
hello
false
hello -private
true
hello -private zbc
true
1
2
3
4
5
6
2
3
4
5
6
# 4.6 帮助信息
yargs 模块提供以下方法,生成帮助信息
- usage 用法格式
- example 提供例子
- help 显示帮助信息
- epilog 出现在帮助信息的结尾
// #!/usr/bin/env node
let argv = require("argv")
.option("n", {
alias: "name",
demand: true,
default: "tom",
describe: "你的名字",
type: "string",
})
.usage("Usage:hello [options]")
.example("hello -n zbc", "say hello to zbc")
.alias("h", "help")
.epilog("copyright 2018").argv
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
← 十一.tcp 十三.compress →