webpack打包流程以及plugin和loader的作用

打包過程都做了什么

1沪伙、Webpack 的運(yùn)行流程是一個(gè)串行的過程喷好,從啟動(dòng)到結(jié)束會(huì)依次執(zhí)行以下流程泌类,1卧抗、初始化參數(shù):從配置文件和 Shell 語句中讀取與合并參數(shù)藤滥,得出最終的參數(shù);
2社裆、開始編譯:用上一步得到的參數(shù)初始化 Compiler 對(duì)象拙绊,加載所有配置的插件,執(zhí)行對(duì)象的 run 方法開始執(zhí)行編譯泳秀;
3悦析、確定入口:根據(jù)配置中的 entry 找出所有的入口文件;
4卦睹、編譯模塊:從入口文件出發(fā)逗物,調(diào)用所有配置的 Loader 對(duì)模塊進(jìn)行翻譯,再找出該模塊依賴的模塊吕嘀,再遞歸本步驟直到所有入口依賴的文件都經(jīng)過了本步驟的處理违寞;
5贞瞒、完成模塊編譯:在經(jīng)過第4步使用 Loader 翻譯完所有模塊后,得到了每個(gè)模塊被翻譯后的最終內(nèi)容以及它們之間的依賴關(guān)系趁曼;6军浆、輸出資源:根據(jù)入口和模塊之間的依賴關(guān)系,組裝成一個(gè)個(gè)包含多個(gè)模塊的 Chunk挡闰,再把每個(gè) Chunk 轉(zhuǎn)換成一個(gè)單獨(dú)的文件加入到輸出列表乒融,這步是可以修改輸出內(nèi)容的最后機(jī)會(huì);
7尿这、輸出完成:在確定好輸出內(nèi)容后簇抵,根據(jù)配置確定輸出的路徑和文件名,把文件內(nèi)容寫入到文件系統(tǒng)射众。在以上過程中碟摆,Webpack 會(huì)在特定的時(shí)間點(diǎn)廣播出特定的事件,插件在監(jiān)聽到感興趣的事件后會(huì)執(zhí)行特定的邏輯叨橱,并且插件可以調(diào)用 Webpack 提供的 API 改變 Webpack 的運(yùn)行結(jié)果典蜕。

plugin

1、Webpack 通過 Plugin 機(jī)制讓其更加靈活罗洗,以適應(yīng)各種應(yīng)用場(chǎng)景愉舔。在 Webpack 運(yùn)行的生命周期中會(huì)廣播出許多事件,Plugin 可以監(jiān)聽這些事件伙菜,在合適的時(shí)機(jī)通過 Webpack 提供的 API 改變輸出結(jié)果轩缤。
2、Webpack 啟動(dòng)后贩绕,在讀取配置的過程中會(huì)先執(zhí)行 new BasicPlugin(options) 初始化一個(gè) BasicPlugin 獲得其實(shí)例火的。在初始化 compiler 對(duì)象后,再調(diào)用 basicPlugin.apply(compiler) 給插件實(shí)例傳入 compiler 對(duì)象淑倾。插件實(shí)例在獲取到 compiler 對(duì)象后馏鹤,就可以通過 compiler.plugin(事件名稱, 回調(diào)函數(shù)) 監(jiān)聽到 Webpack 廣播出來的事件。并且可以通過 compiler 對(duì)象去操作 Webpack娇哆。3湃累、在開發(fā) Plugin 時(shí)最常用的兩個(gè)對(duì)象就是 Compiler 和 Compilation,它們是 Plugin 和 Webpack 之間的橋梁碍讨。Compiler 和 Compilation 的含義如下:Compiler 對(duì)象包含了 Webpack 環(huán)境所有的的配置信息治力,包含 options,loaders垄开,plugins 這些信息琴许,這個(gè)對(duì)象在 Webpack 啟動(dòng)時(shí)候被實(shí)例化,它是全局唯一的溉躲,可以簡(jiǎn)單地把它理解為 Webpack 實(shí)例榜田;Compilation 對(duì)象包含了當(dāng)前的模塊資源、編譯生成資源锻梳、變化的文件等箭券。當(dāng) Webpack 以開發(fā)模式運(yùn)行時(shí),每當(dāng)檢測(cè)到一個(gè)文件變化疑枯,一次新的 Compilation 將被創(chuàng)建辩块。Compilation 對(duì)象也提供了很多事件回調(diào)供插件做擴(kuò)展。通過 Compilation 也能讀取到 Compiler 對(duì)象荆永。
4废亭、Compiler 和 Compilation 的區(qū)別在于:Compiler 代表了整個(gè) Webpack 從啟動(dòng)到關(guān)閉的生命周期,而 Compilation 只是代表了一次新的編譯具钥。
5豆村、開發(fā)插件時(shí)需要注意:只要能拿到 Compiler 或 Compilation 對(duì)象,就能廣播出新的事件骂删,所以在新開發(fā)的插件中也能廣播出事件掌动,給其它插件監(jiān)聽使用、傳給每個(gè)插件的 Compiler 和 Compilation 對(duì)象都是同一個(gè)引用宁玫。粗恢。也就是說在一個(gè)插件中修改了 Compiler 或 Compilation 對(duì)象上的屬性,會(huì)影響到后面的插件欧瘪、有些事件是異步的眷射,這些異步的事件會(huì)附帶兩個(gè)參數(shù),第二個(gè)參數(shù)為回調(diào)函數(shù)佛掖,在插件處理完任務(wù)時(shí)需要調(diào)用回調(diào)函數(shù)通知 Webpack妖碉,才會(huì)進(jìn)入下一處理流程。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末苦囱,一起剝皮案震驚了整個(gè)濱河市嗅绸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撕彤,老刑警劉巖鱼鸠,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異羹铅,居然都是意外死亡蚀狰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門职员,熙熙樓的掌柜王于貴愁眉苦臉地迎上來麻蹋,“玉大人,你說我怎么就攤上這事焊切“缡冢” “怎么了芳室?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)刹勃。 經(jīng)常有香客問我堪侯,道長(zhǎng),這世上最難降的妖魔是什么荔仁? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任伍宦,我火速辦了婚禮,結(jié)果婚禮上乏梁,老公的妹妹穿的比我還像新娘次洼。我一直安慰自己,他們只是感情好遇骑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布卖毁。 她就那樣靜靜地躺著,像睡著了一般质蕉。 火紅的嫁衣襯著肌膚如雪势篡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天模暗,我揣著相機(jī)與錄音禁悠,去河邊找鬼。 笑死兑宇,一個(gè)胖子當(dāng)著我的面吹牛碍侦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播隶糕,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼瓷产,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了枚驻?” 一聲冷哼從身側(cè)響起濒旦,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎再登,沒想到半個(gè)月后尔邓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锉矢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年梯嗽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沽损。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡灯节,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情炎疆,我是刑警寧澤卡骂,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站磷雇,受9級(jí)特大地震影響偿警,放射性物質(zhì)發(fā)生泄漏躏救。R本人自食惡果不足惜唯笙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盒使。 院中可真熱鬧崩掘,春花似錦、人聲如沸少办。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽英妓。三九已至挽放,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蔓纠,已是汗流浹背辑畦。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腿倚,地道東北人纯出。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像敷燎,于是被迫代替她去往敵國(guó)和親暂筝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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

  • 編寫 Loader Loader就像是一個(gè)翻譯員硬贯,能把源文件經(jīng)過轉(zhuǎn)化后輸出新的結(jié)果焕襟,并且一個(gè)文件還可以鏈?zhǔn)降慕?jīng)過多...
    oWSQo閱讀 7,594評(píng)論 0 8
  • Loader 一個(gè)Loader的職責(zé)是單一的,只需要完成一種轉(zhuǎn)換饭豹。如果一個(gè)源文件需要經(jīng)歷多步轉(zhuǎn)換才能正常使用鸵赖,就通...
    Upcccz閱讀 525評(píng)論 0 2
  • 前言 Plugin(插件) 是 webpack 生態(tài)的的一個(gè)關(guān)鍵部分。它為社區(qū)提供了一種強(qiáng)大的方法來擴(kuò)展 webp...
    champyin閱讀 1,878評(píng)論 0 3
  • 說在前面:這些文章均是本人花費(fèi)大量精力研究整理墨状,如有轉(zhuǎn)載請(qǐng)聯(lián)系作者并注明引用卫漫,謝謝本文的受眾人群不是webpack...
    RockSAMA閱讀 6,927評(píng)論 2 7
  • 基本打包原理 Webpack Loader Webpack Plugin HMR原理 Webpack的性能優(yōu)化 構(gòu)...
    大白兔奶糖味閱讀 167評(píng)論 0 0