如何在NodeJS中開發一個命令行界面(CLI)工具

在這裏插入圖片描述藉助Heroku的Oclif框架作爲開發人員,我們經常會用到CLI工具。從git到cloud shells,我們處處都在使用這些工具。所以,是時候開發一個自己的了。在此過程中,我們將使用Heroku的強大的oclif框架。

Oclif是什麼?
它是一個快速構建CLI工具的開放框架,由著名的Heroku提供。

要建什麼?
我們將創建一個待辦事項指令,它有四個操作:

1、添加新任
2、查看所有任務
3、更新任務
4、刪除一個任務

初始化項目
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的文件,並且該指令將在無需任何設置的情況下運行。讓我們刪除hello.js,因爲我們不需要它了。

設置數據庫

爲了存儲我們的任務,我們需要一個存儲系統。爲了簡單起見,我們將使用lowdb,這是一個非常簡單的json文件存儲系統。

然後我們來安裝它吧:

npm install lowdb --save

讓我們在項目根目錄中創建一個db.json的文件。這個文件將保存我們的數據。然後我們需要安裝lowdb。現在,我們將在src目錄中創建一個名爲db.js的文件。這個文件將保存數據庫的內容。

在此,我們只是先加載所需的庫和文件,然後將一個空的todos陣列定義爲基本集合(如果是SQL數據庫的話,那麼它就是一個表格)。

添加任務
Oclif爲我們提供了流暢的指令生成功能。讓我們運行以下代碼:

oclif command add
這將在src/commands目錄中創建一個名爲add.js的文件。讓我們用下面的代碼替換該文件的內容:

該文件有幾個關鍵組件:

一個運行函數,執行此命令的主要功能的,
一項描述,這是指令的文件分類,
還有標誌,它描述傳遞給指令的標誌。

這裏,我們有一個名爲task的標誌,它具有string類型。我們可以運行這個命令

./bin/run add --task="welcome task"
該指令將向數據庫添加一個任務,並登載該操作的響應。

顯示任務

在show.js中,我們以升序顯示所有任務。我們在chalkjs中添加了一些顏色,以便更好地查看命令結果。

更新任務

爲了簡單起見,我們現在只是將更新部分的任務設置爲done。我們只需要將任務的id當成flag。

./bin/run update --id=1
這會在這個任務裏設置done = true以及id = 1。

刪除任務

刪除非常簡單:我們將id作爲標誌傳遞,然後從數據庫中刪除相關任務。

快好了
就像這樣,我們做了一個非常簡單的todocli。現在,如果我們想像其他標準的CLI工具一樣使用它,或者讓我們的朋友使用它,我們需要使它成爲一個npm包。我們要把它發佈在npm上。

完成開發併發布到npm
首先,我們要有一個npm帳戶。然後,我們需要登錄運行指令。
npm login
然後在項目目錄下運行

npm run prepack
這將打包該項目,並使其具備從描述和標誌生成的自述文件並準備好發佈。

現在,在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是不正確,你可以修改嗎?在回答部分告訴我你是怎麼解的。

oclif : https://oclif.io
lowdb: https://github.com/typicode/lowdb
chalk: https://github.com/chalk/chalk
todocli: https://www.npmjs.com/package/todocli-frombd

今天的分享就到這裏,希望本文能幫助到您!

點贊,讓更多的人也能看到這篇內容(收藏不點贊,都是耍流氓 -_-)
關注公衆號「新前端社區」,享受文章首發體驗!
每週重點攻克一個前端技術難點。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章