我已经做了一些CLI。我最近做的最简单的一个可能是split-guide。你会看到CLI的代码在这里。我告诉npm使用该文件的转译版本,作为package.json 中的 bin ,其中key 是二进制文件的名称(所以你会在终端输入什么来使用CLI),value 是二进制文件所在的包中的路径(在我的例子中,它在dist 目录中,我用babel转译到这里(我使用了 p-s为我的脚本)。
有了这个配置,当npm (或 yarn)安装我的包时,它会在node_modules/.bin 目录中创建一个指向该文件的符号链接(或者,如果是全局安装的,它会把它放在你的全局包加载到$PATH 的地方)。对于本地安装的软件包,你可以用你的npm脚本使用这些二进制文件(这种行为在官方文档中有点解释)。
所以,例如,因为我已经这样设置了split-guide ,我可以在我的 react-jest-workshop这里。
- 第一行有
#!/usr/bin/env node。这被称为shebang,它有效地告诉系统用node运行脚本。 - 该文件的其余部分几乎都是在配置
yargs以接受我想要的参数。实际上,有无数的npm包可以帮助解析process.argv变成可用的东西(标志等),我已经用了commander,meow和其他一些我想不起来的东西,但我最满意的是yargs.它非常强大。 - 你也会注意到,我在这里没有做很多的逻辑。这是因为对这个文件进行单元测试是很麻烦的。你会在这里找到我的测试,看到它有点复杂,但实际上它是一个相当坚实的集成测试。它的大部分实际上只是使用了Jest快照,这实际上是超级有利的,使我非常确定我的改变会对工具产生的影响。我对Jest快照测试非常满意,并且绝对推荐它用于测试你的CLI!
- 包的主要逻辑在目录的其他部分。
src目录中。通常我会对其进行单元测试,但这个包特别是我不希望有很多人使用,所以我没有花时间。事实上,我甚至没有报告这个项目的覆盖率,这对我来说是很罕见的😅。
我希望这对你有帮助祝您好运!
