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