使用 Nodejs 制做命令行工具

不少编程语言均可以来开发命令行工具。写代码的时候,若是有一些简单的小工具做为辅助,开发效率能够必定程度上提升。javascript

Node.js 做为前端必须掌握的一个技术点,学习用它来开发命令行工具也是称为必须的一个技能了。html

下面的内容就是介绍如何开发一个命令行工具,从简单到复杂。在最后也会列举一些命令行参数的处理模块,目的是让命令行工具更加灵活。前端

可执行脚本

首先,建立一个脚本文件,名字为 hello。至于为何不使用后缀,这个应该是为了更容易阅读,毕竟不少执行脚本都是没有后缀的。java

hello 中写入须要执行的脚本代码 :node

#!/usr/bin/env node
console.log('hello world');

#!/usr/bin/env node 必需要写在脚本文件的第一行,目的是用来指定该脚本文件执行的环境。在这里指定执行环境为 Node.js 环境。webpack

若是想让该文件能够执行,就须要指定该脚本文件的权限为可执行权限。web

$ chmod 755 hello

执行结束以后,hello 就能够执行了。npm

$ ./hello
hello world

须要注意的是,在执行命令的时候必定要指定 hello 脚本文件所在的路径,不然没法正常执行。编程

$ hello
zsh: command not found: hello

若是想让该命令行工具能够在全局执行,那么能够建立一个 package.json 文件。json

{
  "name": "hello",
  "bin": {
    "hello": "hello"
  }
}

其中 name 是未来执行命令的关键词;bin 用来指定命令对应可执行脚本文件的地址。

若是 bin 中只有一个可执行脚本,能够指定一个字符串,如 "bin": "./bin/webpack.js"

建立完 package.json 后,而后执行 npm link 命令。

$ npm link

该命令执行完以后,会在本机中建立一个连接,链接到当前脚本文件所在的目录。

~/node/v8.9.3/bin/hello -> ~/node/v8.9.3/lib/node_modules/hello/hello
~/v8.9.3/lib/node_modules/hello -> ~/Desktop/test-cli

能够看到全局的 hello 指向 node_modules/hello/hello,最终指向的位置是当前脚本文件所在的地址 ~/Desktop/test-cli

须要说明的是,当前连接指定以后,只能到 Node.js 的全局目录中本身删除,或者直接删除本身的脚本文件所在的目录。

处理命令行参数

在处理命令行参数以前,首先要认识命令行参数。

在 Node.js 中经过 process.argv 来获取命令行参数。

$ node test.js foo bar

这个时候经过 process.argv 获取到的命令行参数是一个数组。

[ 
  '/Users/negivup/.nvm/versions/node/v8.9.3/bin/node',
  '/Users/negivup/Desktop/test-cli/hello',
  'foo',
  'bar'
]

能够看到第一个参数是 node,第二个是脚本文件,从第三个参数开始才是真正的输入参数。

所以,处理命令行参数,就可使用下面的形式来处理。

#!/usr/bin/env node
console.log('hello ' + process.argv[2]);

这个时候执行命令,就能够根据输入来决定输出了。

$ hello wang
hello wang

处理命令行参数的经常使用模块

在这里列举一些经常使用的命令行参数处理模块,为的就是之后可以写出更增强大的命令行工具。

yargsminimist 都是用来解析命令行参数的,可是有一点须要注意的是 yargs 内部的解析引擎就是 minimistminimist 就是一个轻量级的命令行参数解析引擎。

它们二者共同点确定有,不一样点就是 yargs 是对 minimist 进行了更进一步的封装。

参考连接

相关文章
相关标签/搜索