使用webpack的動機(jī)

  • 頁面中越來越多的js
  • 現(xiàn)在瀏覽器提供更多接口
  • 更少的頁面重載刷新,頁面中有更多的代碼

這些導(dǎo)致瀏覽器端存在大量的代碼瞬捕,需要重新組織鞍历,于是出現(xiàn)了模塊系統(tǒng)劣砍。

模塊系統(tǒng)目前有很多標(biāo)準(zhǔn):

  • <script>標(biāo)簽風(fēng)格(沒有模塊系統(tǒng))
  • Commonjs
  • AMD規(guī)范以及對應(yīng)實現(xiàn)
  • ES6模塊
  • 其它
<script>標(biāo)簽風(fēng)格

如果沒有模塊系統(tǒng)秆剪,我們經(jīng)常會這樣處理模塊化的代碼

<script src="module1.js"></script> 
<script src="module2.js"></script> 
<script src="libraryA.js"></script> 
<script src="module3.js"></script>

各個模塊把接口暴露給全局對象,比如window對象仅讽。各個模塊之間可以通過全局對象進(jìn)行訪問互相依賴的接口。

普遍的問題:

  • 全局對象的沖突
  • 加載的順序是重要的
  • 開發(fā)者需要解決模塊的依賴問題
  • 在大項目中模塊引入的數(shù)目將會非常長并且難以維護(hù)
commomJs:同步的require

這種風(fēng)格使用同步的require方法來加載依賴和返回暴露的接口饱岸。一個模塊可以通過給exports對象添加屬性苫费,或者設(shè)置module.exports的值來描述暴露對象双抽。

require("module");
require("../file.js");
exports.doStuff = function() {};
module.exports = someValue;

CommonJs規(guī)范在服務(wù)端nodejs中使用。
優(yōu)點:服務(wù)端代碼可以被重用铐维;npm中有大量模塊慎菲;用起來簡單方便
缺點:阻塞調(diào)用無法在網(wǎng)絡(luò)環(huán)境應(yīng)用,網(wǎng)絡(luò)請求是異步的睬棚;不能并行requrie多個模塊

CommonJs規(guī)范的實現(xiàn)

  • node.js -server端
  • browserify
  • modules-webmake - 編譯成一個 bundle
  • wreq -client端
AMD:異步的require
require(["module", "../file"], function(module, file) { /* ... */ }); define("mymodule", ["dep1", "dep2"], function(d1, d2) { 
    return someExportedValue; 
});

優(yōu)點:符合了在網(wǎng)絡(luò)中異步請求的風(fēng)格抑党;可以并行加載多個模塊
缺點:編碼成本增加,可讀性不好寫起來麻煩撵摆;更像是一種臨時修補(bǔ)方案

AMD 規(guī)范的實現(xiàn)有:
require.js - client 端
curl - client 端

ES6模塊

ECMAScript 2015 (6th Edition) 給 JavaScript添加了一些語法結(jié)構(gòu),用來實現(xiàn)另外一種模塊系統(tǒng)

import "jquery"; 
export function doStuff() {} 
module "localModule" {}

優(yōu)點:靜態(tài)分析方便;作為ES的標(biāo)準(zhǔn)前途是光明
缺點:瀏覽器支持還需要很長時間篱瞎;這種風(fēng)格的模塊不多

傳輸

實現(xiàn)了模塊化,將模塊從server端傳輸?shù)綖g覽器端又是另一個問題牵素,傳輸模塊會出現(xiàn)兩個極端:

  • 每個模塊都是一個請求
  • 一個請求包含了所有模塊

這兩種情況目前使用的都很普遍笆呆,但都不是最佳方案请琳,第一種雖然只傳輸需要的模塊俄精,但是要發(fā)多個請求榕堰,請求的延遲會導(dǎo)致應(yīng)用啟動的很慢;第二種雖然請求少圾旨、延遲低魏蔗,但是傳輸不需要的模塊又形成了浪費(fèi)

webpack就提出了一種更靈活的方式:

當(dāng)編譯所有模塊時,將模塊集分成多個較小的組(塊)
這會使得多個請求更小廓鞠、更快产雹。初始化階段不需要的模塊組可以按需加載。這樣就可以加速初始加載夕土,當(dāng)你實際需要代碼時也能加載更多的代碼塊瘟判。
「分割點」取決于開發(fā)者
一個大的代碼庫也是可能的

并且webpack除了能處理js模塊,其他資源也可以處理篮撑,這樣我們使用起來就更方便

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赢笨,一起剝皮案震驚了整個濱河市驮吱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桐筏,老刑警劉巖拇砰,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異牧氮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)展姐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門圾笨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逊谋,“玉大人,你說我怎么就攤上這事板鬓。” “怎么了俭令?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵抄腔,是天一觀的道長。 經(jīng)常有香客問我赫蛇,道長雾叭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任暂幼,我火速辦了婚禮移迫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鹰服。我一直安慰自己揽咕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布亲善。 她就那樣靜靜地躺著,像睡著了一般顿肺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屠尊,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天讼昆,我揣著相機(jī)與錄音骚烧,去河邊找鬼。 笑死赃绊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的运敢。 我是一名探鬼主播么夫,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涉枫!你這毒婦竟也來了腐螟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤衬廷,失蹤者是張志新(化名)和其女友劉穎汽绢,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡酗宋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年蜕猫,在試婚紗的時候發(fā)現(xiàn)自己被綠了回右。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡翔烁,死狀恐怖租漂,靈堂內(nèi)的尸體忽然破棺而出颊糜,到底是詐尸還是另有隱情,我是刑警寧澤衬鱼,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布鸟赫,位于F島的核電站,受9級特大地震影響抛蚤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜朋沮,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一缀壤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧塘慕,春花似錦、人聲如沸条篷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至稚瘾,卻和暖如春摊欠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背些椒。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工掸刊, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人石窑。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓松逊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親经宏。 傳聞我的和親對象是個殘疾皇子驯击,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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