1. 简单脚本
- 新建一脚本文件gk
#!/usr/bin/env node
console.log('hi,kerison');
- 修改文件权限 (添加可读写可执行)
chmod 755 gk
- 运行,在当前目录下,终端中输入:./gk
hi,kerison
- 为了更方便运行,可讲程序连接到系统可执行明明下
- 当前目录下新建package.json
{
"name": "gk",
"bin": {
"gk": "gk"
}
}
- 执行npm link
- 现在终端中而已直接输入:gk
2. 脚本扩展一(获取命令行的参数)
脚本中的命令参数可以从process.argv中存取
- 修改gk
console.log('gk', process.argv)
- 执行 gk hello
gk [ '/Users/kerison/.nvm/versions/node/v5.11.1/bin/node',
'/Users/kerison/.nvm/versions/node/v5.11.1/bin/gk',
'hello' ]
分析:可以看出process.argv是一个命令的数组,第一个是node命令,第二个是当前程序,后续的是依次传入的参数
- 优化参数(yargs)
- 安装yargs
npm install --save yargs
- 修改gk
#!/usr/bin/env node
var argv = require('yargs').argv;
console.log('gk ', argv);
- 执行gk -n x --name kerison other
gk { _: [ 'other' ], n: 'x', name: 'kerison', '$0': 'gk' }
-
分析
可以看出,参数已经被解析成一个对象,$0为命令,除了- 或者 --的参数外,其他匿名参数会被放入一个_的匿名数组中。 -
参数配置
-
修改 gk
#!/usr/bin/env node
var argv = require('yargs')
.option('v', {
alias: 'version',
demand: true,
default: '0.0.1',
describe: 'version name',
type: 'string'
})
.option('h', {
alias: 'help',
demand: true,
describe: 'need help',
})
.argv;
console.log('gk ', argv);
- 运行gk
选项:
-v, --version version name [字符串] [必需] [默认值: "0.0.1"]
-h, --help need help [必需]
缺少必须的选项:h
- 分析:
- option:命令配置
- alias:命令别名
- demand: 命令是否是必选
- describe:命令描述
- type:命令参数类型
- default:参数默认值
- 命令帮助信息
- 修改文件
#!/usr/bin/env node
var argv = require('yargs')
.usage('Usage: gk [options]')
.example('gk -v ', 'somthing')
.help('h')
.epilog('copyright 2016')
.argv;
- 执行gk -h
Usage: gk [options]
选项:
-h 显示帮助信息 [布尔]
示例:
gk -v somthing
copyright 2016
- 分析:
- usage:用法格式
- example:提供例子
- help:显示帮助信息
- epilog:出现在帮助信息的结尾
- 子命令
- 修改文件
#!/usr/bin/env node
var argv = require('yargs')
.command("sub", "sub description ", function(yargs) {
console.log("sub ...");
})
.usage('Usage: gk [options]')
.example('gk -v ', 'somthing')
.help('h')
.epilog('copyright 2016')
.argv;
- 执行gk-h
Usage: gk [options]
命令:
sub sub description
选项:
-h 显示帮助信息 [布尔]
示例:
gk -v somthing
copyright 2016
- 分析:
comand可构建二级命令- 第一个参数是命令名
- 第二个参数是命令描述
- 第三个是用来接受yargs,可解析传入的参数
网友评论