开发Node CLI命令行应用 (一)

简介

CLI是Command Line Interface的缩写,是指可以人机交互的命令行应用,想象一下mac下的terminal。

而Node CLI application本质上还是Node application。就像Node REPL(Read-Eval-Print-Loop)或Node shell,只需在terminal中输入node即可进入命令行模式执行js代码。为了重复执行js代码,我们可以将命令集写到一个文件中,并用node <filename>.js执行它。当然文件的执行可以接受参数,通过process.argv以数组的形式获取,例如[‘node’, <filename>.js, arg-1, …]。最后,为了使它更像一个CLI,我们还需要添加shebang来指定执行脚本的解释器。
下面将通过两个效果一样的demo,来演示如何实现一个简单的Node CLI应用

为了方便比较,这里将尝试创建两个一样的cli,一个使用commander,一个则使用原生node js

原生Node CLI

按照如下步骤创建不使用框架的Node CLI:
1. 创建并进入执行CLI的目录

2. 创建并打开文件(这里使用atom)

3. 输入如下代码。可以看出它使用process.argv来读取参数,并硬编码的实现了接受help参数和name,country和message参数组合,这里仅为演示而用。

4. 保存退出到文件所在目录,执行如下图指令测试:

使用框架创建Node CLI

Node社区提供了多款辅助创建CLI应用的框架,这里选用Commander来演示创建Node CLI的步骤:
1. 创建并进入执行CLI的目录

2. 生成package.json文件,这里name写为my-node-cli,其它一路回车

3. 安装commander依赖

4. 创建并打开文件(这里使用atom)

5. 输入如下代码,它的效果和上面demo一样,但可以看出可读性更好,代码更少。

6. 保存退出到文件所在目录,执行如下图指令测试:

可以看出,使用原生js和commander可以实现一样的效果,但使用框架可以大大简化开发流程,节约开发时间,避免reinvent the wheel,所以推荐使用框架开发Node CLI应用

下面的demo将基于commander-node-cli继续。

本地安装Node CLI应用

1. 在index.js文件顶部添加shebang,代码如下

2. 在package.json添加如下代码来注册命令introduce

3. 安装introduce命令到本地

4. 执行如下图代码查看结果,可以看出introduce已经成为独立的可执行命令。
5. 使用which和readlink查看命令安装情况,如下图。
6. 为了方便开发和调试,使用npm link将introduce命令链接到开发目录,代码调试会立刻反应在命令执行上,如下图。

开发Node CLI命令行应用 (一)