MagiCLI简介:自动为任何模块生成命令行界面(CLI)
MagiCLI的目标是提供一种简便的方法来为任何模块生成命令行界面。 简单易用意味着您只需编写一行代码即可使任何模块都可以通过CLI使用。
要知道如何操作,您可以直接转到MagiCLI的存储库 。 要了解为什么我相信这可以使我们所有人受益,请继续阅读本文。
在Node.js开发人员中,众所周知package.json文件可以包含一个名为bin的属性,该属性用于准备要通过CLI安装和执行的模块。 如果您还不了解它,我建议您在这里查看: https : //docs.npmjs.com/files/package.json#bin
然后,我们有一种简单的方法来创建要在命令行中专门使用的模块,并且随之而来的功能是为任何人提供执行我们从终端构建的模块或通过其调用模块的选项。子进程由在与Node.js不同的环境上运行的程序组成。 目前,npm上发布了540,885个模块。 我想说的是,很多时候我们想从终端上做一些特定的事情时,很有可能在npm上找到一个能够做到的模块,但是,它可能没有命令行接口。
目前,只有11.86%的已发布模块在package.json中定义了bin属性(我下载了注册表镜像以找到此编号)。 如果这些数字更高,那么在寻找要通过命令行使用的程序/脚本时,我们将以npm为源。 因此,我们将更频繁地使用Node.js来编写CLI工具(记住:对于多个平台,一个来源,一个存储库,一个地方来跟踪问题和版本控制)。 当然,并非所有在npm上发布的软件包都适合在终端上使用。 如今,这里还发布了许多前端特定模块。 但是,即使我们排除了这些模块,我们仍然会有成千上万的选择(并且还在不断增长)。
因此,如果npm已经为我们提供了一种简单的方法来为命令行准备好模块,而现在他们为我们带来了一个更简单,更出色的工具来使用CLI模块npx ,为什么我们不能利用它呢? 为什么我们不为自己建立巨大的CLI程序存储库? 为什么还没有铺平通往#JavaScriptEverywhere和#JSEverywhere的道路?
原因是,即使我们有办法做到这一点,也不是免费的。 我们付出了额外的努力,然后再考虑。 正如我们自然会处理其他所有事情一样,我们往往不会在看不见回报的地方投资(时间,精力,金钱等)。 这将是创建CLI的成本,加上每次模块API更改时对其进行维护的成本。 如果最初没有创建要通过命令行使用的模块,并且极少有人需要它,并且最终在npm上寻找它,为什么要花这些额外的步骤呢?
考虑某人(甚至将来某个时候我自己)可以从通过CLI使用我创建的某些模块中受益,然后在考虑我提到的那些主题时停止自己这样做,我开始了解如何如果可以毫不费力地创建和维护命令行界面以跟上模块API的更改,这对我们所有人都很好。 为了帮助我们, MagiCLI在这里。
MagiCLI分析模块导出的内容,并在此基础上创建帮助部分(针对每个命令),基于函数参数名称定义所需选项,并为每个函数(包括嵌套属性)创建命令。 它能够处理许多样式的module.exports,以及任何类型的函数参数声明(Rest参数,Destructuring)。 开箱即用地支持异步方法(Promises),并且还提供了一个简单的API,用于配置和处理执行流程的某些步骤(stdin,之前,之后)。
随意提出任何想法,以改进工具,并在发现问题导致问题的情况下填补问题。 GitHub上还有另一个存储库,即MagiCLI测试机 ,其中许多实际发布的模块都已成功测试。 因为要不断增加要测试的实际模块的数量,所以维护一个专门为此建立的存储库是有意义的,而不是随着时间的推移不断增加MagiCLI本身的大小。 如果您想为不断增加的测试做出贡献,只需发送拉取请求即可。
我只花了几分钟就更新了自己的一些模块以使用CLI,我希望MagiCLI可以帮助您做到这一点;)