這篇文章主要介紹了webpack編譯速度提升之DllPlugin,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
一、前言
The DllPlugin and DllReferencePlugin provide means to split bundles in a way that can drastically improve build time performance.
DllPlugin
結合 DllRefrencePlugin
插件的運用,對將要產出的bundle文件進行拆解打包,可以很徹底地加快webpack的打包速度,從而在開發過程中極大地縮減構建時間。
二、構建效果
結論先行: 使用 DllPlugin
和 DllRefrencePlugin
進行構建,可以縮減50%~70%的構建時間。
參考Demo: dllplugin-demo
2.1 使用DllPlugin前的構建速度
入口文件 main.js
引入了一個 jQuery
文件,圖示打包耗時2.3s。
2.2 使用DllPlugin後的構建速度
使用插件後,打包耗時0.6s,單次對比,縮減時長達到73%! 2.3 如何驗證DLLPlugin已經生效
對比上面兩張圖打包的模塊列表,圖二有一行不一樣的輸出:
[0] delegated ./src/components/jquery.js from dll-reference vendor_57c12dcd8d9774596525 42 bytes {0} [built]
這說明,此次的打包過程,沒有重新打包 jQuery
模塊,而是直接從 vendor_57c12dcd8d9774596525
中代理了。
三、Get Started
DllPlugin作用示意圖:
3.1 配置webpack.dll.config.js打包靜態公共資源
3.1.1 定義webpack.dll.config.js
爲了減小篇幅,只帖關鍵配置內容,詳細訪問 dllplugin-demo :
// webpack.dll.config.js module.exports = { entry: { // 定義程序中打包公共文件的入口文件vendor.js vendor: [path.resolve(src, 'js', 'vendor.js')], }, plugins: [ new webpack.DllPlugin({ // manifest緩存文件的請求上下文(默認爲webpack執行環境上下文) context: process.cwd(), // manifest.json文件的輸出位置 path: path.join(src, 'js', 'dll', '[name]-manifest.json'), // 定義打包的公共vendor文件對外暴露的函數名 name: '[name]_[hash]' }) ] }
3.1.2 聲明靜態公共資源
在配置好 webpack.dll.config.js
文件之後,在 vendor.js
中聲明項目程序中所引用的靜態公共資源。
// vendor.js // 引入自定義在項目目錄中的公共資源(可以在配置中聲明alias映射關係) import 'jquery'; // or 引入npm包資源 // import 'Vue';
3.1.3 打包靜態公共資源
// cross-env模塊需要另外安裝 cross-env NODE_ENV=production webpack --config webpack.dll.config.js --colors --display-modules
根據 webpack.dll.config.js
,會在指定位置生成 vendor.dll.js
文件。
3.2 配置webpack.config.js打包入口文件
生成靜態公共資源 vendor.dll.js
之後,下一步就要在入口文件中關聯引用,這項工作則是由 DllRefrencePlugin
完成的。
3.2.1 在webpack.config.js中關聯引用
// webpack.config.js module.exports = { entry: { // 項目入口文件 'app':path.resolve(src, 'js', 'main.js') }, plugins: [ // dllPlugin關聯配置 new webpack.DllReferencePlugin({ // 跟dll.config裏面DllPlugin的context一致 context: process.cwd(), // dll過程生成的manifest文件 manifest: require(path.join(src, 'js', "dll", "vendor-manifest.json")) }) ] }
3.2.2 項目入口文件中引用靜態公共資源
// main.js // 引入的公共模塊如果在vendor中有被引用過,那麼編譯的時候直接使用靜態文件vendor.dll.js import $ from 'jquery'; console.log($) // import Vue from "Vue"; // console.log(Vue)
引入方式沒有什麼不同的,跟平時正常引入即可。
3.2.3 項目模板中引用公共靜態資源
最後一步,在模板中注入 vendor.dll.js
<!-- index.html --> <script type="text/javascript" src="/src/js/dll/vendor.dll.js"></script>
如此,在接下來的本地開發(dev過程)和線上構建過程,將不再重複靜態公共資源的構建,極大地縮減我們的構建時間。
結語
以上爲webpack(Version 4)使用過程中的小小總結,希望對大家的學習有所幫助,也希望大家多多支持神馬文庫。