用 Node.js 快速开发 cli 应用攻略
这周花了两天 + 一天测试修 Bug 的时间完成了一个 cli,踩了一些坑,觉得也可以总结一波。
主要代码由于是 private 的不便公开,这里主要安利一些相关库。
cli 第一步:commander
commander 用于快速生成 command-line interface。
$ bili_live --help
Usage: bili_live [options] [command]
Commands:
init init the live config
add [roomids...] add roomids to listen(space to split)
remove [roomids...] remove roomids(space to split)
list [config] list config
run just run the listener once
task <command> add task to crontab for minute monitor
backup <dist> backup config to <dist> dir
recover <src> recover config from <src>
Options:
-h, --help output usage information
-V, --version output the version number
可以非常方便的生成诸如此类命令行工具,遥想 sky-weibo-services 的时候我还是拿 process.argv
人肉分析的,到了 bili_live
的时候就开始使用 commander 了,果然方便了很多。
commander 还支持 git style commands,这个到时候可能可以单独水一篇(滑稽),本文暂不赘述。
信息存储:conf
理所当然的,可能需要存储一些 cli 工具长期使用的信息,之前我存储在了 json 文件中人肉读写,如果使用 conf 就不用自己写入了,用起来跟 localStorage 似的,非常方便。
读取配置文件 cosmiconfig
cosmiconfig 会查找文件,支持package.json
的指定字段或者 JSON 或 YAML rc 文件,.config.js 文件,甚至是 --config
,在当前目录下未找到的情况下会不断向父目录查找。
读取最近的 package.json:read-pkg-up
除了配置信息,我们可能还需要读取包中的一些信息,这个时候 read-pkg-up 就有用了,它同时提供同步和异步操作,可以根据需求使用。
同步的 shell 库:shelljs
默认可以通过 child_process
执行 shell 语句,但是更多的时候我们希望是同步的,可以使用 shelljs,exec()
方法中有 slient
选项可以不输出到控制台,用以执行一些赋值。
为 cli 加上升级提示:update-notifier
自己固然也可以请求 npm 检测,自己做缓存,不过用封装好的库开发起来更快更方便更稳定——比如 update-notifier。支持缓存,自定义输出等。
加入 Debug 模式
使用 debug 可以非常方便的为你的 cli 加上 debugger,可以进行更详细的输出。
滑稽的输出:node-emoji
作为一个新时代的逗比,emoji 符合基本法,那么问题来了,怎么样更好的输出呢——node-emoji 或许是个不错的选择,根据占位符输出。
给点颜色看看:chalk
接下来我们自然不希望我们的控制台枯燥无味,适当上色也是有必要的,chalk 提供的色彩选项估计可以让你画一个彩虹小马!
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。