1. 1. 一、首先写一个可执行脚本
  2. 2. 二、修改这个文件的权限
  3. 3. 三、修改唤醒路径
  4. 4. 四、命令行参数
  5. 5. 五、修改可执行文件

js实现命令行工具(2019-5-24)

一、首先写一个可执行脚本

新建一个js文件hello.js,这个文件就是之后用自定义命令唤醒的文件

1
2
3
#!/usr/bin/env node
//第一行用来描述node的所在位置,不可省
console.log('hello pig!')

二、修改这个文件的权限

1
chmod 755 hello

这个命令用来规范文件所有者(7——可读可写可操作)、同一个的用户组和其他用户组的权限(5——可读可操作),主要是增加可操作权(5——可读可操作),如果想要查看文件目前权限可以输入ls -l

修改之后hello.js就可以执行了,在命令行输入./hello.js就能看到hello pig!

三、修改唤醒路径

方法一:将hello.js的路径加入环境变量PATH

方法二:

  • 在当前目录创建package.json,添加如下内容

    1
    2
    3
    4
    5
    6
    7
    {
    "name": "hello",
    "bin": {
    "pig": "hello"
    //前者是执行命令,后者是执行文件名称
    }
    }
  • 执行命令npm link

  • 现在可以直接输入pig直接唤醒文件,输入想要的内容

四、命令行参数

在执行文件时,在执行命令后加参数,可以用process.argv[2]获取,所有的参数分别表表node在系统中的位置,以及需要唤醒的js文件在系统中的位置,以及后带的参数

五、修改可执行文件

为了让整个程序更像是命令行,可以将需要的操作或函数提成另外的文件index.js,再将之前的hello.js修改成如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/env node
const readline = require('readline'); //引入nodejs的内置模块readline,这样可以获取命令行的输入
let catOrPig = require('./index');
//从其他文件引入函数
const rl = readline.createInterface(process.stdin, process.stdout);
let language = process.argv[2]
//这里的process.argv是唤醒程序的参数数组,前两个参数代表node在系统中的位置,以及需要唤醒的js文件在系统中的位置
rl.setPrompt('cop> ');
//这里可以选择设置每一行的提示符
rl.prompt();
//这里用来监听读取命令行的用户输入

rl.on('line', function(line) {
switch(line) {
//参数line为用户在这一行的输入
case 'exit':
rl.close();
//退出
break;
default:
catOrPig(language, line);
//需要执行的操作
break;
}
rl.prompt();
//继续监听命令行输入
});

rl.on('close', function() {
process.exit(0);
});