藉助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…
今天的分享就到這裏,但願本文能幫助到您!
點贊,讓更多的人也能看到這篇內容(收藏不點贊,都是耍流氓 -_-)
關注公衆號「新前端社區」,享受文章首發體驗!
每週重點攻克一個前端技術難點。