作为开发者,CLI 工具似乎陪伴我们工作的每一天,从 git 到 cloud shell —— 我们随时都在使用 CLI。所以,是时候搭建你自己的 CLI 工具了。在这篇文章中我们将使用 Heroku 构建的非常棒的框架 oclif。

什么是 oclif?

它是一款由知名平台 Heroku 提供的可以快速构建 CLI 工具的开源框架。

我们将要构建什么?

我们将要制作一个有四个功能的待办清单列表

  • 添加一个新的任务
  • 查看所有的任务
  • 更新任务
  • 删除任务

初始化我们的项目

Oclif 可以创建两个类型的项目

  1. 含有一个命令的项目
  2. 包含嵌套命令在内的多个命令

在这篇文章中,我们需要一个多命令的项目,让我们开始创建它:

npx oclif multi todocli

运行这个命令并跟着说明操作将在当前目录初始化一个名为 todocli 的新项目

现在,让我们进入目录并运行帮助命令:

cd todocli && ./bin/run --help

这个命令会打印出以下结果:

> USAGE       $ todocli [COMMAND]    COMMANDS    hello       help   display help for todocli

这个文件夹显示了可用的命令及其文档。

可用命令及其文档

项目结构

我们可以在 src 目录下面找到一个名为 commands 的目录。这个目录包含所有命令及其相对文件名。例如,如果我们有一个命令 hello,我们将在这个目录中找到一个名为 hello.js 的文件,该命令无需更多设置即可运行。当我们不需要它的时候可以删除它。

设置数据库

我们需要一个存储系统来存出任务。为简单起见,我们将使用 lowdb 这个非常简单的 json 文件存储系统。用在这个项目上很不错吧?

我们开始安装吧:

npm install lowdb --save

让我们在项目根目录中创建一个 db.json 文件。该文件将保存我们的数据。然后我们需要安装lowdb。现在,我们将在 src 目录中创建一个名为 db.js 的文件。这个文件将会保存我们的数据库资料。 

db.js

在这里,我们首先简单地加载所需的库和文件,然后将定义一个空的 todos 数组作为我们的基本集合(如果你把它想像成 SQL 数据库那这就像一个表)。

添加任务

oclif 为我们提供了平滑的命令生成功能。让我们跟着运行以下命令:

npx oclif command add(原文为:oclif command add,译者实际使用中会报出错误 oclif: command not found)

这个命令将在 src/commands 目录中创建一个名为 add.js 的文件。让我们用下面的代码替换该文件的内容:

add.js

该文件有几个关键组件:

  • 一个执行此命令主要功能的运行函数,
  • 一个描述,这是命令的说明文档
  • 和一个标志,描述传递给命令的标志。

这里,我们有一个名为 task 的标志,它有一个字符串类型。我们可以运行命令

./bin/run add --task="welcome task"

此命令将向数据库添加任务并打印该操作的响应内容。

显示任务

npx oclif command show
show.js

在 show.js 中,我们以升序显示所有任务。我们用 chalkjs 添加了一点颜色,使我们的命令结果更好看。

run command

更新任务

npx oclif command update
update.js

为简单起见,我们现在只为我们的更新部分设置任务。我们只是将任务的 id 作为标志传递。

./bin/run update --id=1

这将为 id = 1 的任务设置 done = true。

移除任务

npx oclif command remove
remove.js

删除非常简单:我们将 id 作为标志传递,然后从数据库中删除相关任务。

差不多完成了! 就这样,我们搭建了一个非常简单的 todocli。现在,如果我们想像任何其他普通的 CLI 工具一样使用它,或让朋友们使用它,我们需要把他做成一个 npm 包。所以我们在 npm 上发布它。

构建并发布到 npm

首先,确保你有一个 npm 帐户。然后,您需要登录运行该命令

npm login

然后在项目目录内运行

npm run prepack

这个命令将会打包项目,并将描述和标志生成 readme 文件,准备发布到 npm。

现在,在npm上发布:

npm publish

如果一切顺利,那么该模块已成功发布在 npm 上。如果它没有发布成功,请检查项目名称和版本。

通过全局安装,我们可以像使用其他 npm 工具一样使用它了:

npm install -g todocli

然后任何人都可以随时随地使用这些命令?

> todocli add --task="Great task!!!"> todocli show> todocli update --id=1> todocli remove --id=1

如果你跟着整篇文章走到这一步,恭喜你?你太棒了。现在,你可以做一点任务:

任务:

id 赋值部分的代码有 bug,你可以修复吗?在评论区留言告诉我你的想法吧。

祝你好运,感谢阅读:)

原文:https://www.freecodecamp.org/news/how-to-build-a-cli-tool-in-nodejs-bc4f67d898ec/,作者:Al-amin Nowshad,译者:blackcai