在上一篇中我们用了10分钟实现了一个完整的古诗词命令行工具,本章中我们主要简绍2个命令行工具开发中常用的库,整个代码大概用时20分钟。
修改命令行颜色
第一个简绍的库就是‘colors-cli’,他支持修改打印出来的文字的样式。
首先安装一下这个依赖npm install colors-cli
,新建一个文件test-color.js
,测试一下它的代码:
1 | var color = require('colors-cli/safe') |
引入color
库的时候可以使用var color = require('colors-cli/safe')
,也可以使用var color = require('colors-cli')
,推荐使用前者,因为前者可以支持链式调用,使用起来更方便。上面运行结果如下:
他是怎么实现的呢?其实是把文字用特殊符号包了一层,命令行对这种特殊符号会处理成样式,就比如color.red.bold('Error!')
其实最后会返回一个字符串'[1m[31m[31mError![0m[0m[0m'
,所以上面三行log代码和下面的结果是一样的,你可以直接用node运行一下:
1 | console.log('[1m[31m[31mError![0m[0m[0m'); |
处理用户输入
在使用命令行的时候往往需要根据用户的参数给出友好的提示,yargs就是处理这种情况的一个优质的库。
有关yargs
的具体使用可以直接看官方的文档,这里就不展开说了。现在我们做一个需求,就是根据用户传入的值,来改变诗词、作者、来源的颜色。代码大致是这样的:
1 |
|
运行结果如下:
代码还是在可以控制的行数范围内,上述代码中4~34行,是yargs
的处理,也是通用的一种写法,这里面有2个属性比较特殊一个是help
另一个是version
,从下面的结果我们可以看到,当输入这两个的时候都会阻止代码的执行,并直接返回相应的信息,如运行node index -h
会返回帮助信息、node index -v
会返回版本信息。在代码中我们可以使用argv.ps
、argv.as
、argv.os
等(其实就是option函数的第一个值)来获取参数的值。getColorMethod
运行使用英文的点或者逗号来拆分以添加多个样式。
代码优化
上述代码中getColorMethod
方法其实可以抽取出去,另外color
库并不是支持输入任何参数,比如你输入node index --as=123
就会报错,因为123并不是color
所支持的样式,所以我们有必要对颜色相关的操作抽取成一个文件,另外检测一下color
库是否支持这个颜色,不支持的话给出有好地提示,现在新建color-util.js
文件。代码如下:
1 | const color = require('colors-cli/safe') |
请求接口的地方我们也可以封装成一个方法,这样可以减少耦合,另外也可以支持模块直接引入(直接使用require引入)。新建random-poem.js
文件,代码如下:
1 | const axios = require('axios'); |
因为网络请求是异步的,所以需要使用回调或者Promise
来处理,我们这里就使用Promise
吧。此时还需要修改一下package.json
文件,添加main
字段,该字段是用来告诉直接模块引入的时候引入哪个文件。
1 | { |
此时需要注意第5行代码。最后修改index.js
文件,使用这些封装的方法:
1 |
|
测试一下输入不支持的情况,你会发现提示的信息已经很友好了:
最后把多余的test-color.js
文件删除了就可以提交了。
就这样我们把一个功能完善的古诗词命令行工具做完了,需要注意一点再次提交的时候,也就是运行npm publish
前,需要修改一下package.json
中的version
字段,而且必须大于当前的版本号,建议使用npm version 1.0.1
这样的命令去修改,因为该命令会顺带把package-lock.json
文件中的版本号也改了。