详解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的打包速度,从而在开发过程中极大地缩减构建时间。

二、构建效果

结论先行: 使用 DllPluginDllRefrencePlugin 进行构建,可以缩减50%~70%的构建时间。

参考Demo: dllplugin-demo

2.1 使用DllPlugin前的构建速度

详解webpack编译速度提升之DllPlugin 

入口文件 main.js 引入了一个 jQuery

文件,图示打包耗时2.3s。

2.2 使用DllPlugin后的构建速度

详解webpack编译速度提升之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作用示意图:

详解webpack编译速度提升之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

标签:webpack,DllPlugin
0
投稿

猜你喜欢

  • Pytorch使用transforms

    2023-11-01 20:34:33
  • MYSQL初学者命令行使用指南

    2024-01-15 08:46:33
  • Python的Django框架中的Context使用

    2023-09-19 15:29:24
  • 前端开发之JS生成32位随机数的方法举例

    2024-04-19 09:56:26
  • 正解SQLSERVER 2005 sql排序(按大小排序)

    2024-01-15 18:34:36
  • python百行代码自制电脑端网速悬浮窗的实现

    2023-02-03 21:52:57
  • oracle中添加删除主键的方法

    2023-06-30 00:28:52
  • VMWare linux mysql 5.7.13安装配置教程

    2024-01-14 04:17:43
  • Python 中如何写注释

    2022-07-10 21:53:11
  • Windows服务器MySQL中文乱码的解决方法

    2024-01-12 16:46:51
  • python sys模块使用方法介绍

    2021-11-24 10:02:11
  • mysql 8.0.12 解压版安装教程

    2024-01-24 15:31:57
  • 详解使用navicat连接远程linux mysql数据库出现10061未知故障

    2024-01-24 22:12:44
  • pytorch常见的Tensor类型详解

    2022-10-25 19:34:01
  • python使用win32com在百度空间插入html元素示例

    2021-09-13 17:00:13
  • 如何由Sybase向SQL Server移植数据库

    2009-01-20 15:56:00
  • 使用python将图片改为灰度图或黑白图

    2023-04-17 12:28:52
  • python集合删除多种方法详解

    2021-12-06 07:59:51
  • 使用Pytorch如何完成多分类问题

    2022-01-06 20:18:46
  • Python编程pygame模块实现移动的小车示例代码

    2021-04-13 10:16:08
  • asp之家 网络编程 m.aspxhome.com