為什么要使用cli
在我們的日常開發(fā)中應(yīng)該經(jīng)常會接觸到cli
(Cmmand Line Interface)王凑,例如npm, yarn, git
等都是cli
工具,我們可以通過在終端運(yùn)行 npm install xxx
或者 yarn install xxx
去在自己的工程里引入一個包杂穷,也可以通過 git clone
將代碼克隆到本地眷唉。
cli
工具的存在某些場景下極大地提高了我們?nèi)粘i_發(fā)的效率,例如你想要刪除一個 size 很大的文件夾残吩,在gui
(用戶圖形界面)下缰趋,可能需要好幾分鐘捧杉,甚至機(jī)器性能比較低的會因此卡死陕见,但是如果在cli
下運(yùn)行,只需一行命令就可以快速刪除而不影響你其他的工作味抖。
同時评甜,作為軟件開發(fā)者來講,我們有時需要執(zhí)行一些特殊的操作仔涩,這些操作可能是在gui
下無法完成的忍坷,那么我們就必須依賴cli
。
如何開發(fā)一個cli工具
在日常工作中我們或許會高頻地使用cli
工具熔脂,那你有沒有想過如何去開發(fā)一個cli
工具呢佩研?
作為一個前端開發(fā),本文將以 JS 為開發(fā)語言霞揉,講述如何開發(fā)一個簡單的cli
工具旬薯。
聲明
本文將圍繞以下幾個講述如何開發(fā)一個簡單的cli
工具。
- 環(huán)境準(zhǔn)備
- 如何配置簡單的 cli 命令
- 如何處理參數(shù)
- 支持交互
1. 準(zhǔn)備
首先适秩,確保你的機(jī)器上已經(jīng)安裝了 node 和 npm绊序,沒有的可以點(diǎn)擊這里進(jìn)行安裝。
然后運(yùn)行一下命令生成一個 node 工程
mkdir mycli & cd mycli
npm init -y
2. 配置一個簡單的命令
此時我們的工程中應(yīng)該有一個package.json
文件隶症, 在該文件中增加 bin
配置政模,如下圖所示岗宣。
其中蚂会,mycli
是cli工具的名稱,對應(yīng)的 value 值是文件入口耗式,這里為了便于文件管理胁住,可以新建一個src/
目錄,將入口文件index.js
放于該目錄下刊咳。
編輯index.js
彪见,內(nèi)容如下:
??第一行很重要,用來指明運(yùn)行環(huán)境
這時我們可以在控制臺運(yùn)行mycli
查看效果
你可能會上述錯誤娱挨,控制臺找不到我們的cli
工具余指,這是因為我們在使用一個工具的時候必須安裝它,例如你沒有安裝npm
的時候去使用也會遇到同樣的錯誤跷坝。
由于我們的mycli
并沒有發(fā)布酵镜,因此可以借助npm link
選擇本地安裝,執(zhí)行:
npm link
然后再執(zhí)行mycli
柴钻,就可以看到index.js
中的內(nèi)容打印到控制臺了淮韭。
3. 處理參數(shù)
很多時候我們需要在運(yùn)行cli
工具時攜帶參數(shù),那么如何獲取到這個參數(shù)呢贴届?
在node
程序中靠粪,通過process.argv
可獲取到命令的參數(shù)蜡吧,以數(shù)組返回.
這里以-h
為例,我們可以先打印一下修改process.argv
占键,看下它是如何存儲參數(shù)的
可以看到數(shù)組的第三個元素即我們想要的參數(shù)昔善,返回修改index.js
在控制臺運(yùn)行mycli -h
注:這里我們只是做一個簡單的示例,故采用這種方式處理參數(shù)畔乙,真實項目中參數(shù)和處理方式可能會更復(fù)雜一些耀鸦,不建議用上述方式,可以采用路由的方式
4. 控制臺交互
有的時候我們可能需要在命令行工具中融入一些交互啸澡,根據(jù)用戶的輸入生成一些東西或者做相應(yīng)的操作袖订。
這里引入一個npm
的包 --- inquirer
這個包基本包含了我們可能用到的交互類型,例如input
嗅虏、list洛姑、confirm等,可以輕松地幫我們實現(xiàn)控制臺的簡單交互皮服。
如何使用這個包及語法參照上面的鏈接楞艾,不再贅述。
在示例代碼中我們設(shè)定了兩個問題:
- 詢問用戶的姓名
- 選擇最喜歡的水果
并將用戶的回答打印到控制臺龄广。
尾聲
本文只是講述了一個簡單的cli
工具的開發(fā)硫眯,在實際運(yùn)用中可能會結(jié)合需求借助一些工具進(jìn)行開發(fā)。
下一篇將講述如何使用 yeoman-generator + cli
工具生成一個腳手架择同。
感興趣的歡迎圍觀两入。
參考資料: