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

藉助Heroku的Oclif框架做爲開發人員,咱們常常會用到CLI工具。從git到cloud shells,咱們到處都在使用這些工具。因此,是時候開發一個本身的了。在此過程當中,咱們將使用Heroku的強大的oclif框架。前端

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

要建什麼?
咱們將建立一個待辦事項指令,它有四個操做:github

一、添加新任
二、查看全部任務
三、更新任務
四、刪除一個任務shell

初始化項目
Oclif能夠生成兩種類型的項目
一、具備一個命令的項目。
二、可能有多個命令(包括嵌套命令)的項目 。數據庫

在本文中,咱們須要一個多命令項目,因此讓咱們生成它:npm

npx oclif multi todocli
運行此項指令並按照說明操做,將在當前目錄中初始化一個名爲todocli的新項目。json

如今,讓咱們進入目錄並運行幫助:bash

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 : oclif.io
lowdb: github.com/typicode/lo…
chalk: github.com/chalk/chalk
todocli: www.npmjs.com/package/tod…

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

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

在這裏插入圖片描述
相關文章
相關標籤/搜索