webpack02 優化第三方庫的打包效能

2021-08-21 07:25:24 字數 2485 閱讀 2995

在引入第三方的庫之後使用webpack打包時,缺省會將這些第三方的庫重新打包,但是實際上需要重新打包的只有業務**,這些第三方庫是完全不用重新打包的,所以需要對這個過程進行優化。

webpack可以配置externals來將依賴的庫指向全域性變數,從而不再打包這個庫,比如對於react:

import react from

'react';

如果你在webpack.config.js中配置了externals

module.exports = 

//其它配置忽略......

};

等於讓webpack知道,對於react這個模組就不要打包,直接指向window.react就好。不過別忘了載入react.min.js(也就是手動的在index.html中引入react),讓全域性中有react這個變數。

配置externals的缺陷:

手動引入react.min.js,感覺還是不是很爽;

有一些庫根本沒有提供生產環境的檔案

存在反覆依賴的庫(比如有的庫import了react)也會導致這個庫被重新打包commonschunkplugin可以將公共包提取出來,還是拿react舉例:

const vue = require('react')

, output: ,

plugins: )

}}

然後打包生成的檔案引入到html檔案裡面

src="/build/vendor.js">

script>

src="/build/bundle.js">

script>

再打包的時候將react打包到了vendor.js當中

module.exports = ,

...}

我們在輸出檔名中增加了[chunkhash:5]變數,表示打包後的檔案中加入保留5位的hash值

現在打包出的檔案bundle和vendor都增加了hash值,我們並不希望vendor的hash發生變化,因為react並沒有變化,所以還要修改commonschunkplugin的配置:

module.exports = ),

] ...

}

這樣修改完之後vendor的hash值不會在變化,並且多了乙個manifest.js檔案,manifest.js為webpack的啟動檔案**,它會直接影響到hash值,用mainfest單獨抽出來了,這樣vendor的hash就不會變了。

commonschunkplugind的缺點:就算vendor每次打包沒有發生變化,hash值也沒有變化,但是每次打包過程中都需要生成一遍,無意義減慢了打包的速度。

webpack提供了這個功能:webpack.dllplugin。

使用這個功能需要把打包過程分成兩步:

打包dll包

引用dll包,打包業務**

首先來打包dll包,配置乙個這樣的webpack.dll.config.js(在簡而優裡面是在build中的vendorlibs.js)

const webpack = require('webpack');

const vendors = ['react', 'react-dom', 'react-router',

// ...其它庫

];const path = require('path')

module.exports = ,

output: ,

plugins: [

new webpack.dllplugin(),

],};

webpack.dllplugin 的選項中:

然後配置webpack.config.js:

const webpack = require('webpack');

module.exports = ,

output: ,

plugins: [

new webpack.dllreferenceplugin(),

],};

webpack.dllreferenceplugin的選項中:

執行webpack

$ webpack --config webpack.dll

.config

.js$ webpack --config webpack.config

.js

html引用方式

src="/dist/vendors.dll.js">

script>

script>

如何優化增強第三方庫?

開發中,我們不可避免要使用,別人花很多時間打磨好的輪子,輪子好用,但有時卻無法完全滿足我們的要去,這時我們不可避免的要去修改增強一下這個庫,如何增強?我認為,一般有兩種修改的方式 1入侵式修改 2疊加式修改 1入侵式修改 如果涉及的地方邏輯較簡單清晰,那就直接找到目標處改它,改它的資料,改它的ui。...

PyThon第三方庫

本文 自 戀花蝶的部落格 今天公司停電,沒上班。跑上來更新個部落格,跟大家分享一下我常用的幾個第三方 python 庫。python 語言之所以能夠如此流行,除了本身內建許多程式庫來保障快速開發之外,目不睱接的第三方庫也是一大主因。結合我目前的工作 網遊開發 我常用的幾個第三方庫如下 wxpytho...

lua第三方庫

luacom 支援com呼叫 luadoc 支援lua 的文件生成 luaexpat 支援xml解析 luafilesystem 檔案系統訪問 lualogging 基於log4j的日誌 luaprofiler 效能測試工具 luasocket 網路庫,支援http,ftp,smtp,mime,ur...