用 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 语句,但是更多的时候我们希望是同步的,可以使用 shelljsexec() 方法中有 slient 选项可以不输出到控制台,用以执行一些赋值。

为 cli 加上升级提示:update-notifier

自己固然也可以请求 npm 检测,自己做缓存,不过用封装好的库开发起来更快更方便更稳定——比如 update-notifier。支持缓存,自定义输出等。

加入 Debug 模式

使用 debug 可以非常方便的为你的 cli 加上 debugger,可以进行更详细的输出。

滑稽的输出:node-emoji

作为一个新时代的逗比,emoji 符合基本法,那么问题来了,怎么样更好的输出呢——node-emoji 或许是个不错的选择,根据占位符输出。

给点颜色看看:chalk

接下来我们自然不希望我们的控制台枯燥无味,适当上色也是有必要的,chalk 提供的色彩选项估计可以让你画一个彩虹小马!

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 知识, node.js

添加新评论