前言
小張是一枚工作了3年的前端攻城獅,在公司也算一名“老油條”,新需求來(lái)了,對(duì)于他來(lái)說(shuō)也是信手拈來(lái),雖然996,日子也倒算安逸。
直到有一天,經(jīng)理安排了一個(gè)node的項(xiàng)目。小張平時(shí)也學(xué)過(guò)相關(guān)知識(shí),自身有些底子。但事情好像不那么順利,雖然需求本身的量不大,但需要自己搭建一套應(yīng)用。小張沒(méi)有太多的服務(wù)端開(kāi)發(fā)經(jīng)驗(yàn)??鄲乐?,突然靈光乍現(xiàn),想到借助同事之前的項(xiàng)目,將多余帶來(lái)刪掉,這樣不就好了么。
哪知,這才是噩夢(mèng)的開(kāi)始,由于項(xiàng)目各種依賴,一不小心就會(huì)各種報(bào)錯(cuò)。好不容易,開(kāi)發(fā)完成,線上也是經(jīng)常暴露些莫名其妙的問(wèn)題。
不出意外,小張被經(jīng)理請(qǐng)去喝了杯枸杞泡茶。
"我其實(shí)能做的很好的,可卻把大部分精力花在了需求之外的事情上",回到家,小張癱坐在床上,委屈的自語(yǔ)道。
恰巧從隔壁串門回來(lái)的老王聽(tīng)到,隨口說(shuō)了句,“這是你們公司工程化太薄弱了,后面有的苦吃呢”。
為什么每個(gè)企業(yè)都要做工程化
小張轉(zhuǎn)頭望著這位從搬來(lái)就神龍箭頭不見(jiàn)尾的陌生室友,倒有些欣喜。雖然老王平日總是不著調(diào),但畢竟是某大互聯(lián)網(wǎng)公司的架構(gòu)師,難得有機(jī)會(huì)被指點(diǎn)一兩招,小張欣喜的跳到老王面前。
“大佬,請(qǐng)指點(diǎn)指點(diǎn)小弟”,小張滿眼期待的望著老王。
老王輕撫了下頭上的僅剩的莫妮卡和簡(jiǎn)妮,正襟道:“工程化就是為了解決平日里開(kāi)發(fā)的繁瑣工作,大量重復(fù)且費(fèi)時(shí)的工作可以通過(guò)一些工具來(lái)解決,說(shuō)白了就是為了讓開(kāi)發(fā)更多精力花在關(guān)鍵開(kāi)發(fā)中。”
順勢(shì),小張說(shuō)出了最近的困擾。
“你用過(guò)VUE和REACT的CLI吧,其實(shí)你完全可以做一個(gè)適合自己公司的CLI”,老王故作神秘道。
“然后呢,具體該怎么做呢?”,小張期待的問(wèn)道。
“我有點(diǎn)餓了,腦子秀逗了...”,老王一臉狡詐。
“好說(shuō),老規(guī)矩,一頓燒烤,一瓶霸王”,說(shuō)完,兩人朝著孫寡婦的燒烤攤走去。
基本思路
酒足飯飽,老王也是知無(wú)不言。
vue-cli就是將項(xiàng)目模板作為獨(dú)立項(xiàng)目,放在git上,本地安裝cli,通過(guò)指令將模板下載到本地,然后通過(guò)模板引擎渲染,創(chuàng)建出新的項(xiàng)目。
我們完全可以參考此思路,將包含公司使用的工具庫(kù)、UI庫(kù)包含到項(xiàng)目中,使用時(shí),直接通過(guò)指令創(chuàng)建。這樣不管是WebPC、MobileH5、Node、小程序,都可以快速創(chuàng)建,且只需要關(guān)注模板的優(yōu)化即可,一勞永逸。
小張聽(tīng)后,滿心激動(dòng),構(gòu)思著各種方案設(shè)計(jì)。
工程結(jié)構(gòu)
第二天,小張?jiān)缭绲膩?lái)到公司,和經(jīng)理溝通了自己的想法。經(jīng)理大大贊揚(yáng),并將任務(wù)交給了小張。
重拾信心,小張查找各種資料,整理出一個(gè)較為理想的方案。
項(xiàng)目流程:
首先,搭建項(xiàng)目。
/bin # ------ 命令執(zhí)行文件
/lib # ------ 工具模塊
package.json
關(guān)鍵庫(kù)介紹
#!/usr/bin/env node
在寫npm包的時(shí)候需要在腳本的第一行寫上#!/usr/bin/env node ,用于指明該腳本文件要使用node來(lái)執(zhí)行。
commander.js
node.js命令行界面的完整解決方案,受Ruby Commander啟發(fā)。詳情點(diǎn)擊這里
download-git-repo
下載工具,支持下載GitHub, GitLab, Bitbucket中的項(xiàng)目。
inquirer.js
命令行交互庫(kù),支持單選、多選、詢問(wèn)選擇等交互處理。

metalsmith
一個(gè)非常簡(jiǎn)單,可插拔的靜態(tài)網(wǎng)站生成器。在 Metalsmith 中,所有的邏輯都是由插件來(lái)處理的。 你只需將它們鏈接在一起。
工作原理:
讀取源目錄中的所有文件。
調(diào)用一系列操縱文件的插件。
將結(jié)果寫入目標(biāo)目錄!
美化腳手架
ora
優(yōu)雅的終端轉(zhuǎn)輪
[圖片上傳失敗...(image-3d0b53-1605013392166)]
chalk
chalk 包的作用是修改控制臺(tái)中字符串的樣式,包括:
字體樣式(加粗、隱藏等)
字體顏色
背景顏色
AlphabetJS
專門用于輸出文字圖案的小工具。詳情點(diǎn)擊這里
總結(jié)
一番折騰,終于搞出了個(gè)樣子:

打開(kāi)思路的小張,現(xiàn)在思緒萬(wàn)千。
那我是不是可以通過(guò)工具打通告警系統(tǒng)、發(fā)布系統(tǒng)等系統(tǒng)呢,這樣,真的可以一鍵開(kāi)發(fā)了。
(待續(xù)...)


