我終于理解了這些前端開發(fā)工具史隆,相信你也可以

題圖

即便像我這樣非常有經(jīng)驗的開發(fā)者,對于一些前端開發(fā)工具曼验,也會產(chǎn)生疑惑泌射。解決辦法是在概念層面上理解它們是如何工作的,以及如何共同工作的鬓照。

這篇文章是我個人對于前端開發(fā)工具的理解熔酷,拋開代碼層面,我們從理念層面來談它們是如何完成它們的工作的颖杏。

不要對新技術(shù)產(chǎn)生恐懼

目前已經(jīng)有太多的前端開發(fā)工具:Node, NPM, Grunt, Gulp, Bower, Webpack, Browserify, Yeoman, Brunch……很容易讓人產(chǎn)生跟不上節(jié)奏的感覺纯陨。

關(guān)鍵點就是不要害怕,所有這些工具都是為了讓你更高效而設(shè)計的。

要理解它們是什么翼抠,為什么用它們咙轩,怎么用它們,我們只需要理解以下幾個概念阴颖。

概念#1——開發(fā)工具的核心作用“安裝 vs.執(zhí)行”

開發(fā)工具做兩件事:

  1. 安裝
  2. 執(zhí)行

當你碰到一個新的工具活喊,第一個問題應(yīng)該是:“這個工具想要幫我安裝還是執(zhí)行?”

npm量愧,Bower和Yeoman都屬于“安裝”工具钾菊,他們能把安裝這件事做的很漂亮。他們可以安裝前端庫偎肃,例如Angular.js或React.js煞烫。它們可以在服務(wù)器上安裝開發(fā)環(huán)境,它們可以安裝測試庫累颂。他們甚至可以幫你安裝其他的前端開發(fā)工具滞详。

"什么是bower?"

”一個包管理器紊馏,用npm安裝它料饥。”

“什么是npm朱监?”

“一個包管理器岸啡,你可以用brew安裝它『毡啵”

“什么是brew巡蘸?”...

——@ddprrt

簡短的說,它們可以安裝你可以想象的和代碼相關(guān)的東西擂送。

Grunt赡若,Webpack,Require.js团甲,Brunch和Gulp都是“執(zhí)行”工具逾冬,它們比安裝工具更復(fù)雜。它們的目標是自動化web開發(fā)中的體力活和容易出錯的任務(wù)躺苦∩砟澹“執(zhí)行”的事情往往被稱作“任務(wù)”。

為了執(zhí)行這些“任務(wù)”匹厘,需要使用它們各自生態(tài)系統(tǒng)中的包和插件嘀趟。每個工具執(zhí)行任務(wù)的方式有差別,它們不會做相同的事情愈诚。有些“執(zhí)行”工具試圖做你拋給它的所有事情她按,其他的專注于一件事牛隅,例如解決Javascript依賴(例如Browserify, Require.js)

有時,在同一個項目中酌泰,可能會使用好幾個這樣的工具媒佣。

這里有一個被“執(zhí)行”工具自動化的任務(wù)列表:

  1. 在文件中替換一個文本字符串
  2. 創(chuàng)建文件夾,并將文件移入
  3. 一鍵執(zhí)行單元測試
  4. 保存文件時刷新瀏覽器
  5. 合并所有Javascript為一個文件陵刹,所有CSS文件為一個文件
  6. 最小化我的Javascript和CSS文件
  7. 在html頁面中修改<script>標簽的位置

當你理解了工具的安裝功能和執(zhí)行功能默伍,對它們進行分類也變得非常容易:

分類

概念#2——Node和npm是所有開發(fā)工具的祖先

Node和npm可以安裝和執(zhí)行所有這些開發(fā)工具,所以你的項目會有它們的身影衰琐。正因為這一點也糊,大多數(shù)開發(fā)者在求助于其他工具前,都會盡可能的使用這兩款工具羡宙。

Node和npm落到我們的二分歸納法中狸剃,Node是執(zhí)行工具,而npm是安裝工具狗热。

npm可以安裝像Angular.js或React.js之類的庫捕捂。為了開發(fā)方便,它還可以安裝一個服務(wù)器斗搞,從而在本地運行你的app。它甚至可以安裝例如最小化你的代碼的可執(zhí)行工具慷妙。

另一方面僻焚,Node是“執(zhí)行”工具,例如運行Javascript文件膝擂,服務(wù)器等等虑啤。

如果你剛開始學(xué)習(xí),從Node+npm開始架馋,建議你在這兩個工具上多花一些時間狞山。當你的項目大到一定程度,你會遇到Node和npm自動化的限制叉寂,那時你再考慮使用其他的開發(fā)工具萍启。

概念#3——有一種構(gòu)建意味著你的應(yīng)用已經(jīng)就緒

開發(fā)者經(jīng)常把Javascript文件和CSS文件分成很多個文件,這樣可以讓我們寫出模塊化的代碼屏鳍,并且每個文件只完成一件事勘纯。一個文件只做一件事可以減少你的認知負擔(dān)(如果你認為多個文件比起一個大文件來說會讓你更困惑,試圖在一個5000行的源文件上工作钓瞭,我想你很快會改變你的想法的??)

但是驳遵,當你的產(chǎn)品發(fā)布后,太多文件不是一個好事情山涡,當一個用戶訪問你的網(wǎng)站堤结,你的每一個文件都需要使用一個額外的HTTP請求唆迁,這會使你的網(wǎng)站加載速度變慢。

作為補救竞穷,你可以為你的應(yīng)用做一次“構(gòu)建”唐责,它會將所有CSS文件合并為一個文件,對于JavaScript文件也一樣来庭。結(jié)果是妒蔚,你把文件大小和文件數(shù)最小化后,用戶拿到的就是優(yōu)化過的文件了月弛,要這樣做肴盏,你需要用一個構(gòu)建工具。

下圖是一個開發(fā)中的應(yīng)用代碼截圖帽衙,注意到它擁有5個<script>標簽和3個<link>標簽菜皂,如果你注意到左邊,你可以看到DEVELOPMENT文件夾下有10個文件

Your app in development

同時下圖是相同的應(yīng)用厉萝,只不過被構(gòu)建工具施展了“魔法”恍飘。

注意到我們是怎么只有一個<script>標簽和一個<link>標簽的?和之前DEVELOPMENT下有10個文件比起來谴垫,現(xiàn)在只有4個文件章母。

應(yīng)用每行都是一樣的,只不過我們將其壓縮到一個優(yōu)雅的小包里翩剪,我們稱之為“build”乳怎。

Your app in its build form

既然這樣做僅僅只會節(jié)省用戶幾十毫秒的加載頁面時間,你可能會想知道這樣做到底值不值前弯◎阶海可以這樣說,如果你的網(wǎng)站只為少數(shù)一些人提供服務(wù)恕出,你不需要關(guān)心這件事询枚。構(gòu)建工程僅僅只適用于大流量的網(wǎng)站(或者那些被認為即將成為大流量的網(wǎng)站??)

如果你剛剛學(xué)編程,或網(wǎng)站流量較小浙巫,這樣做將不是太有價值金蜀。

概念#4——安裝和執(zhí)行的分界線比較模糊

沒有一個工具是只做一件事且其他工具做其他的事,他們都會擁有安裝和執(zhí)行功能的畴。但是大多數(shù)情況是廉油,一個工具更趨向于安裝或更趨向于執(zhí)行。

一個“安裝”工具有時也會執(zhí)行程序苗傅,npm經(jīng)常這樣做抒线,npm也可以執(zhí)行命令和腳本——不僅僅是安裝文件。一種工具渣慕,就像Yeoman嘶炭,在你的機器上安裝預(yù)編譯引用的應(yīng)用抱慌,同時它也會按需動態(tài)生成新文件,這些工具模糊了安裝和執(zhí)行間的這條分界線眨猎。

概念#5——對于開發(fā)工具抑进,沒有唯一的組合

在項目中使用哪些開發(fā)工具,完全取決于你自己睡陪。

你可以選擇不使用任何工具寺渗,僅僅保證復(fù)制,粘貼兰迫、最小化信殊、開啟服務(wù)、以及其它相關(guān)操作能夠高效運作即可汁果。

或者你僅僅只是用Node和npm來完成這些工作涡拘。對于初學(xué)者來說可以滿足,但是當你的工程增長到一定程度据德,你可能會感覺到體力勞動越來越多鳄乏。

這時你或許可以選擇Node及npm上游的幾個工具。所以你可以把Node和npm作為你自己的核心棘利,也許還可以加上Grunt+Bower或Webpack或Gulp+Bower橱野。

使用Node+npm上面的幾種組合中的一種或幾種,可以讓你的工程中的大部分任務(wù)自動化善玫,代價是學(xué)習(xí)這些工具的學(xué)習(xí)曲線很陡峭水援。

Build Tools in order of increasing complexity, but decreasing tediousness

概念#6——開發(fā)工具的學(xué)習(xí)曲線很陡峭,所以只需學(xué)習(xí)什么是必須的

開發(fā)一個應(yīng)用足夠難蝌焚,你可能會學(xué)習(xí)一門新語言或者一個新的框架,或者你有比較取巧的商業(yè)邏輯誓斥,而合并一個開發(fā)工具可能會把額外的一層錯綜復(fù)雜的事物加到你的項目中只洒。問題就在于寫開發(fā)工具相關(guān)的代碼的人并不屬于你的團隊。

我的建議是只學(xué)習(xí)你需要在你工作中涉及到的部分劳坑,其他的不學(xué)毕谴。

最佳的學(xué)習(xí)新事物的辦法是你有一個真實的任務(wù)去完成。例如距芬,為了你的利益涝开,不要學(xué)習(xí)Grunt怎么拷貝文件的。取而代之的是框仔,直到你確切需要這樣做的時候舀武,再使用它來解決吧。

記桌胝丁:早期就把問題復(fù)雜化將會讓你變慢银舱。

概念#7——所有的開發(fā)工具擁有共同的目標:通過將所有體力勞動自動化從而讓你開心

當你發(fā)揮了你的開發(fā)工具的所有潛能瘪匿,我把這種狀態(tài)稱作“開發(fā)工具涅磬”。這是一種當你保存一個文件寻馏,或運行一個命令棋弥,于是大量的任務(wù)便會自動執(zhí)行的狀態(tài)。

如果你的工具仍然需要你手動移動文件诚欠,改變值顽染,或者運行命令才能編譯,那么你還沒有達到“工具涅磬”的狀態(tài)轰绵。

擁有開發(fā)工具的好處便是保存一個文件粉寞,可以引發(fā)你的應(yīng)用的編譯,并發(fā)送到瀏覽器從而刷新新的內(nèi)容藏澳。這會顯著的加速你的前端開發(fā)工作流仁锯。

所以如何衡量你該付出多少努力在配置和設(shè)置開發(fā)工具上?很簡單:只到它所做的事情讓你高興為止翔悠。

概念#8——不只是你业崖,很多人都覺得這些工具的文檔很糟糕

事實上,很多這些工具的文檔都不足蓄愁,經(jīng)常讓我們做一些基本的任務(wù)都變得很難双炕。

預(yù)先定義好的文檔非常之少,你會看到很多不同的操作都導(dǎo)致同樣的錯誤——在StackOverflow上經(jīng)炒樽ィ看到回答的是同一個問題妇斤。

即便文檔少這件事非常厭煩,但這些工具仍然可以增強你的代碼技巧丹拯,并實現(xiàn)了很多創(chuàng)造性的事情站超。

原文:https://medium.freecodecamp.com/making-sense-of-front-end-build-tools-3a1b3a87043b#.hpbycrwz3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市乖酬,隨后出現(xiàn)的幾起案子死相,更是在濱河造成了極大的恐慌,老刑警劉巖咬像,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件算撮,死亡現(xiàn)場離奇詭異,居然都是意外死亡县昂,警方通過查閱死者的電腦和手機肮柜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倒彰,“玉大人审洞,你說我怎么就攤上這事〈洌” “怎么了预明?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵缩赛,是天一觀的道長。 經(jīng)常有香客問我撰糠,道長酥馍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任阅酪,我火速辦了婚禮旨袒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘术辐。我一直安慰自己砚尽,他們只是感情好,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布辉词。 她就那樣靜靜地躺著必孤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瑞躺。 梳的紋絲不亂的頭發(fā)上敷搪,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音幢哨,去河邊找鬼赡勘。 笑死,一個胖子當著我的面吹牛捞镰,可吹牛的內(nèi)容都是我干的闸与。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼岸售,長吁一口氣:“原來是場噩夢啊……” “哼践樱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凸丸,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤拷邢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后甲雅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體解孙,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡坑填,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年抛人,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脐瑰。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡妖枚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苍在,到底是詐尸還是另有隱情绝页,我是刑警寧澤荠商,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏尚粘。R本人自食惡果不足惜务冕,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铜涉。 院中可真熱鬧,春花似錦、人聲如沸嘹裂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寄狼。三九已至,卻和暖如春氨淌,著一層夾襖步出監(jiān)牢的瞬間泊愧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工宁舰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拼卵,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓蛮艰,卻偏偏與公主長得像腋腮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子壤蚜,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容