详解webpack编译速度提升之DllPlugin
作者:Wilton 发布时间:2024-02-23 20:57:10
一、前言
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过程)和线上构建过程,将不再重复静态公共资源的构建,极大地缩减我们的构建时间。
来源:https://juejin.im/post/5b3e22e3f265da0f4b7a72df


猜你喜欢
- 原图代码 src = cv2.imread("28.png") gray_src = cv2.c
- 导语哈喽!哈喽~我是木木子,很久没给大家更新游戏的类似啦——有粉丝投稿,说最近由于受疫情影响封闭在家
- ImageEnhance模块提供了一些用于图像增强的类。一、ImageEnhance模块的接口所有的增强类都实现了一个通用的接口,包括一个方
- 导语:近年来,全世界都纷纷投身网络热潮。从小企业到大公司,再到网络学校和大学,大家都在努力提升自己的网络影响力,这样既免费为自身品牌做广告,
- 本文介绍基于Python语言arcpy模块,实现栅格影像图层建立与多幅遥感影像数据批量拼接(Mosaic)的操作。首先,相关操作所需具体代码
- 1、python-pptx模块简介使用python操作PPT,需要使用的模块就是python-pptx,下面来对该模块做一个简单的介绍。这里
- 当由where子句指定的搜索条件指向另一张表时,就需要使用子查询或嵌套查询。1 子查询子查询是一个嵌套在select、insert、upda
- sqrt()方法返回x的平方根(x>0)。语法以下是sqrt()方法的语法:import mathmath.sqrt( x
- 1.高阶函数# 1.变量指向函数# 调用函数和函数本身print("-10的绝对值为:",abs(-10))print(
- 前言最近因为工作需要要使用PHP 7,所以从网上找教程进行安装, 结果编译没问题, 安装的时候报了错误。错误如下cp -pR -f phar
- 本文介绍了python opencv 直方图反向投影的方法,分享给大家,具体如下:目标: 直方图反向投影原理: 反向投影可以用来做图像分割,
- 数据及配置文件之争数据及文件通常有三种类型:配置文件型:如ini,conf,properties文件,适合存储简单变量和配置项,最多支持两层
- Oracle的Nvl函数nvl( ) 函数从两个表达式返回一个非null 值。语法NVL(eExpression1, eExpression
- 此文章主要向大家描述的是MySQL高级查询方法之记录查询的实际操作步骤,以及对其实际操作过程中要用到的代码的详细描述,以下就是文章的主要内容
- 概述Anaconda安装后,会在开始菜单中添加菜单项,但是这些菜单项中,没有Jupyter Lab快捷方式。在实现前应该明确两点:开始菜单是
- 代码如下:USE [tempdb] GO /****** Object: UserDefinedFunction [dbo].[fun_ge
- CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的×××方式。我的理解是,比如你访问过招商银行的
- 1.什么是FBV和CBVFBV是指视图函数以普通函数的形式;CBV是指视图函数以类的方式。2.普通FBV形式def index(reques
- 在NumPy中,所有的标准三角函数如sin、cos、tan等均有对应的通用函数。一、利萨茹曲线(Lissajous curve)利萨茹曲线是
- ceil()方法返回x的值上限 - 不小于x的最小整数。语法以下是ceil()方法的语法:import mathmath.cei