在引入第三方的庫之後使用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...