0%

使用Nodejs编写命令行工具

编写命令行工具

创建一个项目

直接使用npm init初始化一个项目,package.json文件内容如下:

1
2
3
4
5
6
7
8
9
10
{
"name": "nb-cli",
"version": "1.0.0",
"description": "",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}

创建可执行程序

创建文件bin/nb-cli,内容如下:

1
2
3
4
5
#!/usr/bin/env node
'use strict';

console.log('cli');
console.log(process.argv);

配置自定义命令

修改package.json文件,添加自定义命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"name": "nb-cli",
"version": "1.0.0",
"description": "",
"bin": {
"nb-cli": "./bin/nb-cli"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}

测试命令

使用npm install -g将模块安装全局模块中,然后使用nb-cli命令进行测试。

解析命令行参数

我们使用Commander模块来解析参数。

安装Commander

1
npm install --save commander

解析参数

修改bin/nb-cli文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env node
'use strict';

var program = require('commander');

program
.version('0.1.0')
.option('-p, --peppers', 'Add peppers')
.option('-P, --pineapple', 'Add pineapple')
.option('-b, --bbq-sauce', 'Add bbq sauce')
.option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')
.parse(process.argv);

console.log('you ordered a pizza with:');
if (program.peppers) console.log(' - peppers');
if (program.pineapple) console.log(' - pineapple');
if (program.bbqSauce) console.log(' - bbq');
console.log(' - %s cheese', program.cheese);

测试命令

重新安装,然后使用nb-cli命令进行测试。