webpack DLL 動態(tài)鏈接庫

項目地址:https://github.com/Ewall1106/webpack-demo

是什么剃浇?

許多應用程序并不是一個完整的可執(zhí)行文件从撼,它們被分割成一些相對獨立的動態(tài)鏈接庫舌劳,即 DLL 文件股囊,放置于系統(tǒng)中。當我們執(zhí)行某一個程序時暴构,相應的 DLL 文件就會被調用想暗。一個應用程序可使用多個 DLL 文件挨摸,一個 DLL 文件也可能被不同的應用程序使用诲宇,這樣的 DLL 文件被稱為共享 DLL 文件际歼。— 百度百科

  • 翻譯一下姑蓝,在 webpack 中的動態(tài)鏈接庫就是:由于每次更改了內容 webpack 都會自動重新編譯打包鹅心,如果我們把用到的如 reactjquery 這些外部庫抽離出去纺荧,改變文件的時候不讓 webpack 重新打包這部分文件旭愧,直接引用,那么重新編譯打包的速度就會快很多宙暇,這樣我們開發(fā)的效率也會提升输枯。

  • 再翻譯一下,所謂動態(tài)鏈接庫就是幫你提升開發(fā)效率的占贫,使 webpack 在重編譯的時候能打包更快桃熄。

  • webpack 中實現(xiàn) DLL 主要依賴兩個插件 webpack.DllReferencePluginwebpack.DllPlugin,先記好這兩個即可型奥。

安裝

  • 還是從頭開始蜻拨,先新建一個文件初始化一下打包的基本配置池充。

  • 我們以 react 這個庫為例桩引,假設我們要把 react 做為動態(tài)鏈接庫缎讼,讓其不需要每次重新編譯。

# 初始化
$ npm init -y
# 安裝一些基礎的包
$ sudo npm i webpack webpack-cli react react-dom html-webpack-plugin webpack-dev-server clean-webpack-plugin babel-loader @babel/core @babel/preset-env @babel/preset-react --save-dev
  • 接下來就是一些基本的 webpack.config.js 配置了坑匠,這些前面文章都已經就逐步詳細介紹了血崭,這里就一筆帶過了,本篇文章只重點說明 DLL 怎么配置的厘灼。

  • 然后我們在入口文件中隨便寫幾行代碼夹纫,跑起來后我們就可以看到 hello world 躍然于頁面上了。

import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render(<div>hello world</div>, document.getElementById('app'));

打包 React

  • 我們要把 react 做為動態(tài)鏈接庫设凹,所以我們單獨為其新建一個打包配置文件 - webpack.react.js
const path = require('path');
const webpack = require('webpack');

module.exports = {
  mode: 'development',

  entry: {
    react: ['react', 'react-dom'],
  },

  output: {
    filename: '_dll_[name].js',
    path: path.resolve(__dirname, './dist'),
    library: '_dll_[name]',
    libraryTarget: 'umd',
  },

  plugins: [
    new webpack.DllPlugin({
      name: '_dll_[name]',
      path: path.resolve(__dirname, 'dist', 'manifest.json'),
    }),
  ],
};
  • 上面的配置重點是 plugins 插件中配合的 webpack.DllPlugin 這個插件舰讹,它會生成一個名為 manifest.json 的文件,你可以理解為就是一張表闪朱,我們可以定義依賴月匣,也就是說待會我們用到了 react 的時候,告訴 webpack 就直接在這個文件里找奋姿,別重復打包編譯 react 了锄开。

  • 打包一下,我們就可以看到 dist 文件夾中出現(xiàn)了打包后的 react 文件和 manifest.json 依賴表了称诗。

$ npx webpack --config webpack.react.js
/dist
+ _dll_react.js
+ manifest.json

設置依賴

  • 現(xiàn)在我們在主配置文件 webpack.config.js 中配置一下依賴萍悴。
module.exports = {
  // ...
  // ...
  plugins: [
    // 當使用react的使用,先去這個表里面找
    new webpack.DllReferencePlugin({
      manifest: path.resolve(__dirname, 'dist', 'manifest.json'),
    }),
  ],
};
  • 這個就是告訴 webpack寓免,當我們頁面中引入使用了 react 這個庫的時候癣诱,直接去 manifest.json 里去找,然后引用打包好的 _dll_react.js 就行了袜香。

小結

  • 對比這兩種方式撕予,基本快了了 10ms 左右,如果你的項目很大困鸥,將一些 react嗅蔬、vue、jquery 這些庫都進行 DLL 配置后疾就,那么開發(fā)效率提高還是可觀的澜术。
./src/index.js 172 bytes [built][code generated]
webpack 5.4.0 compiled successfully in 56 ms

// 使用DLL配置react庫后:

./src/index.js 172 bytes [built][code generated]
webpack 5.4.0 compiled successfully in 41 ms
  • DLL 這個名稱很嚇人,但是其實配置起來并不難猬腰,主要就是利用了 webpack 自己實現(xiàn)的兩個插件鸟废,就簡單的說到這里。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末姑荷,一起剝皮案震驚了整個濱河市盒延,隨后出現(xiàn)的幾起案子缩擂,更是在濱河造成了極大的恐慌,老刑警劉巖添寺,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胯盯,死亡現(xiàn)場離奇詭異,居然都是意外死亡计露,警方通過查閱死者的電腦和手機博脑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來票罐,“玉大人叉趣,你說我怎么就攤上這事「醚海” “怎么了疗杉?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蚕礼。 經常有香客問我烟具,道長,這世上最難降的妖魔是什么闻牡? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任净赴,我火速辦了婚禮,結果婚禮上罩润,老公的妹妹穿的比我還像新娘玖翅。我一直安慰自己,他們只是感情好割以,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布金度。 她就那樣靜靜地躺著,像睡著了一般严沥。 火紅的嫁衣襯著肌膚如雪猜极。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天消玄,我揣著相機與錄音跟伏,去河邊找鬼。 笑死翩瓜,一個胖子當著我的面吹牛受扳,可吹牛的內容都是我干的。 我是一名探鬼主播兔跌,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼勘高,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起华望,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤蕊蝗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赖舟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蓬戚,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年建蹄,在試婚紗的時候發(fā)現(xiàn)自己被綠了碌更。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡洞慎,死狀恐怖,靈堂內的尸體忽然破棺而出嘿棘,到底是詐尸還是另有隱情劲腿,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布鸟妙,位于F島的核電站焦人,受9級特大地震影響,放射性物質發(fā)生泄漏重父。R本人自食惡果不足惜花椭,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望房午。 院中可真熱鬧矿辽,春花似錦、人聲如沸郭厌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽折柠。三九已至宾娜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扇售,已是汗流浹背前塔。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留承冰,地道東北人华弓。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像巷懈,于是被迫代替她去往敵國和親该抒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容