Node set up on CentOS 7

Node official site gives instruction to install node & npm on CentOS 7, as see https://nodejs.org/en/download/package-manager/, just copy that.

1. Running script to check and provide instructions

2. Install with yum command

3. Check its success

Node set up on CentOS 7

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

Node CLI应用非常广泛,可以封装常用的命令集,可以生成项目脚手架,框架或者类库的辅助工具。这里通过一个‘问答’小程序来演示如果创建Node CLI应用。你可能会吐槽它弱的可怜,因为这里的核心是帮助大家快速理解Node CLI的创建,而真实的系统确实不止如此。

需求:

1. 读取一个题库文件,生成试卷
2. 用户输入姓名和考号
3. 开始答题(这只支持选择题)
4. 生成答题结果,退出应用

技术选型:

    commander + inquirer + chalk + figlet + clear + joi + fs

实现:

1. 命令行参数

命令行应用首先需要能接受子命令,参数等,这里需要接受题库文件。比较常见的处理参数的类库有commander,minimist和yargs等,而commander能提供像terminal一样的功能,还能自动生成help。代码如下:

2. 生成应用标题

命令行应用经常需要在最顶部显示大字号应用标题,这里用figlet实现。而为了区分标题,正文,选项和结果等,我们使用chalk来控制颜色和文字样式。

3. 读入题库

Node自身提供了fs来处理文件的读写操作,fs也是唯一使用的Node内置模块。这里使用program.file来读取通过commander获取的参数名为file指定的题库文件。代码如下:

4. 验证题库格式

题库需要有一致的可以识别的格式,这里使用joi验证题库文件格式,保证试题规范。这里使用json做为题库格式,如下,当然格式自己可以自由定义,但需要修改相应验证代码:

而joi提供了丰富的验证接口,例如包括数组,对象等在内的多种数据类型。代码如下:

5. 答题

问答应用最重要的是交互式的答题过程,而inquirer提供了实现选择题,判断题和问答题等多种交互形式,用于实现用户信息输入和答题过程。questions定义了数组,每个元素代表一个问题,inquirer使用prompt实现交互答题过程,最后将答题结果通过answers传递给then统计结果。代码如下:

问答应用的运行截图如下,完整版代码可以通过Github获取。

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

开发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命令行应用 (一)