webpack從源碼來粗略談一談

總結(jié): 通過各種plugin處理各種文件資源紧憾。


我看webpack 源碼的先后順序大致為:

文件順序

1. package.json里是一些基本設(shè)置

2. lib/webpack.js 和 bin/webpack.js 是webpack的執(zhí)行入口
代碼里可查看到webpack對入?yún)⒌奶幚恚恍┏跏蓟僮鞑常约拜敵鰧ο箢愋?/p>

3.webpack 的核心compiler
webpack 的?Compiler?模塊是主引擎赴穗,它通過 webpack CLI 或?webpack?API 或 webpack 配置文件傳遞的所有選項(xiàng),創(chuàng)建出一個 compilation 實(shí)例膀息。

Compiler?也是我們所說的?Tapable?實(shí)例望抽。通過這種實(shí)現(xiàn)機(jī)制,我們可以理解為履婉,它混合(mix)了?Tapable類煤篙,來使實(shí)例也具備注冊和調(diào)用插件功能。大多數(shù)面向用戶的插件毁腿,要首先在?Compiler?上注冊辑奈。Compiler 運(yùn)行機(jī)制可以被提取為以下要點(diǎn)

lib/webpack.js 源碼

*?通常有一個 Compiler 的主實(shí)例苛茂。可以創(chuàng)建子 compilers 來委托特定任務(wù)鸠窗。

*?創(chuàng)建 compiler 的多數(shù)復(fù)雜度妓羊,在于為它填充所有相關(guān)的 options 選項(xiàng)。

*?webpack?通過?WebpackOptionsDefaulter?和?WebpackOptionsApply稍计,來專門為?Compiler?提供所需的所有初始數(shù)據(jù)躁绸。

*?Compiler?是一個執(zhí)行最簡功能,來保證生命周期運(yùn)行的函數(shù)臣嚣。它把所有的加載(loading)/打包(bundling)/寫入(writing)工作委托給各種插件净刮。

* plugin.apply(compiler)?將插件注冊到?Compiler?生命周期中的任何特定鉤子事件。

*?Compiler?暴露?run?方法硅则,它啟動了?webpack?所有編譯工作淹父。在執(zhí)行完成后,會調(diào)用傳遞給它的?callback?函數(shù)怎虫。記錄 stats 和 errors 的所有末端工作暑认,都在此回調(diào)函數(shù)中完成。

4. compiler 的核心tapable
以下摘自官網(wǎng):
Tapable?是一個小型的庫大审,允許你對一個 javascript 模塊添加和應(yīng)用插件蘸际。它可以被繼承或混入到其他模塊中。類似于 NodeJS 的?EventEmitter?類徒扶,專注于自定義事件的觸發(fā)和處理捡鱼。除此之外,Tapable?還允許你通過回調(diào)函數(shù)的參數(shù)酷愧,訪問事件的“觸發(fā)者(emittee)”或“提供者(producer)”。

個人理解:

tapable 類似于事件處理缠诅,可注冊各種事件+回調(diào)溶浴, 在webpack中用于各種插件注冊和處理。
pulgin 函數(shù)相當(dāng)于事件on

applyPlugin 相當(dāng)于事件的emit

tapable 查看代碼文件路徑順序?yàn)椋篢apable.js -> SynicBailHook.js -> Hook.js

5. 各種plugin

太多了管引,晚點(diǎn)看……

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末士败,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子褥伴,更是在濱河造成了極大的恐慌谅将,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件重慢,死亡現(xiàn)場離奇詭異饥臂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)似踱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門隅熙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稽煤,“玉大人,你說我怎么就攤上這事囚戚〗臀酰” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵驰坊,是天一觀的道長匾二。 經(jīng)常有香客問我,道長拳芙,這世上最難降的妖魔是什么察藐? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮态鳖,結(jié)果婚禮上转培,老公的妹妹穿的比我還像新娘。我一直安慰自己浆竭,他們只是感情好浸须,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著邦泄,像睡著了一般删窒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顺囊,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天肌索,我揣著相機(jī)與錄音,去河邊找鬼特碳。 笑死诚亚,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的午乓。 我是一名探鬼主播站宗,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼益愈!你這毒婦竟也來了梢灭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蒸其,失蹤者是張志新(化名)和其女友劉穎敏释,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摸袁,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钥顽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了靠汁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耳鸯。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡湿蛔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出县爬,到底是詐尸還是另有隱情阳啥,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布财喳,位于F島的核電站察迟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏耳高。R本人自食惡果不足惜扎瓶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泌枪。 院中可真熱鬧概荷,春花似錦、人聲如沸碌燕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽修壕。三九已至愈捅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間慈鸠,已是汗流浹背蓝谨。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留青团,地道東北人譬巫。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像督笆,于是被迫代替她去往敵國和親芦昔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355

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