如何開發(fā)一個cli工具

為什么要使用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工具。

  1. 環(huán)境準(zhǔn)備
  2. 如何配置簡單的 cli 命令
  3. 如何處理參數(shù)
  4. 支持交互

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è)定了兩個問題:

  • 詢問用戶的姓名
  • 選擇最喜歡的水果

并將用戶的回答打印到控制臺龄广。

示例代碼
執(zhí)行結(jié)果
返回用戶輸入的數(shù)據(jù)

尾聲

本文只是講述了一個簡單的cli工具的開發(fā)硫眯,在實際運(yùn)用中可能會結(jié)合需求借助一些工具進(jìn)行開發(fā)。

下一篇將講述如何使用 yeoman-generator + cli工具生成一個腳手架择同。

感興趣的歡迎圍觀两入。

參考資料:

http://developer.51cto.com/art/201906/597672.htm

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市敲才,隨后出現(xiàn)的幾起案子裹纳,更是在濱河造成了極大的恐慌,老刑警劉巖紧武,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剃氧,死亡現(xiàn)場離奇詭異,居然都是意外死亡阻星,警方通過查閱死者的電腦和手機(jī)朋鞍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妥箕,“玉大人滥酥,你說我怎么就攤上這事》猓” “怎么了恨狈?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長呛讲。 經(jīng)常有香客問我禾怠,道長返奉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任吗氏,我火速辦了婚禮芽偏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘弦讽。我一直安慰自己污尉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布往产。 她就那樣靜靜地躺著被碗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仿村。 梳的紋絲不亂的頭發(fā)上锐朴,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音蔼囊,去河邊找鬼焚志。 笑死,一個胖子當(dāng)著我的面吹牛畏鼓,可吹牛的內(nèi)容都是我干的酱酬。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼云矫,長吁一口氣:“原來是場噩夢啊……” “哼膳沽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泼差,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤贵少,失蹤者是張志新(化名)和其女友劉穎呵俏,沒想到半個月后堆缘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡普碎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年吼肥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片麻车。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡缀皱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出动猬,到底是詐尸還是另有隱情啤斗,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布赁咙,位于F島的核電站钮莲,受9級特大地震影響免钻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜崔拥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一极舔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧链瓦,春花似錦拆魏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贴膘,卻和暖如春溪掀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背步鉴。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工揪胃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人氛琢。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓喊递,卻偏偏與公主長得像,于是被迫代替她去往敵國和親阳似。 傳聞我的和親對象是個殘疾皇子骚勘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345