myvin

使用 node 编写基于 CLI 的工具小贴士

myvin · 2017-01-04翻译 · 289阅读 原文链接

嗨,@amandeepmittal!谢谢你联系我!很高兴你喜欢我的课程 :D

我曾经编写过一些命令行工具(CLI),其中最近我写的最简单一个应该是 split-guide 了。你可以在 这里 查看 CLI 代码。这里告知 npm 使用已经编译过的版本,如 package.json 中的 bin 所示,对象中的 key 是二进制的名字(就是你使用 CLI 在终端里输入的指令),value 是二进制的保存路径(我的是在 dist 文件夹下,这里我使用 babel 进行了预编译,点击 这里 查看(脚本中我使用的是 [p-s](https://github.com/kentcdodds/p-s))。

写好配置后,当使用 npm(或者 [yarn](https://yarnpkg.com/))来安装所需的依赖包时,会在 node_modules/.bin 路径下创建一个[symlink](https://en.wikipedia.org/wiki/Symbolic_link)(如果是全局安装的话,就在全局安装的 $PATH 路径下)。对于本地安装的包,你可以使用 npm 脚本来运行这些二进制(相关运行说明可以在官方文档中查看)。

举个栗子,因为我已经安装了 split-guide,我可以直接在我的 [react-jest-workshop](https://github.com/kentcdodds/react-jest-workshop) 项目中使用,点击这里查看源码。

让我们再看一下 [bin](https://github.com/kentcdodds/split-guide/blob/master/src/bin/index.js) 文件。这里有几点需要指出:

  1. 第一行#!/usr/bin/env nodeshebang 符号,用来告知系统使用 node 来运行脚本。

  2. 剩下的部分是配置 [yargs](https://www.npmjs.com/package/yargs) 来接收我需要的参数。有很多 npm 包可以用来将 [process.argv](https://nodejs.org/docs/latest/api/process.html#process_process_argv) 解析成一些有用的东西(比如 flag 等)。我使用过 [commander](https://www.npmjs.com/package/commander)[meow](https://www.npmjs.com/package/meow) ,还有一些我想不起来了,但是我最喜欢使用的是 [yargs](https://www.npmjs.com/package/yargs),它非常强大。

  3. 你应该也注意到了,我并没有在这里写大量的逻辑。因为对该文件进行单元测试有点儿小痛苦。你可以在 这里 查看我的测试,可以看到是有点复杂的,但是这确实是非常牢固的集成测试。大部分的代码片段是使用的 Jest 快照测试,这非常有用,能够使我明确我的修改会造成哪些影响。我非常乐意使用 Jest 快照测试,同时也强力推荐你来测试你自己的 CLIs!

  4. 包的主要逻辑是在 [src](https://github.com/kentcdodds/split-guide/tree/fb4b2a2ebc1fb8c3c010c2af1318861b8bb1bb13/src) 路径下的其他文件里。正常情况下我会对其进行单元测试,但是我并不期待很多人去使用这个包,所以我没有在这上面花时间😅。

希望这篇文章对你有用!祝你好运!

译者myvin尚未开通打赏功能

相关文章