Webpack中SplitChunksPlugin 配置参数详解


Posted in Javascript onMarch 24, 2020

代码分割本身和 webpack 没有什么关系,但是由于使用 webpack 可以非常轻松地实现代码分割,所以提到代码分割首先就会想到使用 webopack 实现。

在 webpack 中是使用 SplitChunksPlugin 来实现的,由于 SplitChunksPlugin 配置参数众多,接下来就来梳理一下这些配置参数。

官网上的默认配置参数如下:

module.exports = {
 //...
 optimization: {
  splitChunks: {
   chunks: 'async', // 代码分割时对异步代码生效,all:所有代码有效,inital:同步代码有效
   minSize: 30000, // 代码分割最小的模块大小,引入的模块大于 30000B 才做代码分割
   maxSize: 0, // 代码分割最大的模块大小,大于这个值要进行代码分割,一般使用默认值
   minChunks: 1, // 引入的次数大于等于1时才进行代码分割
   maxAsyncRequests: 6, // 最大的异步请求数量,也就是同时加载的模块最大模块数量
   maxInitialRequests: 4, // 入口文件做代码分割最多分成 4 个 js 文件
   automaticNameDelimiter: '~', // 文件生成时的连接符
   automaticNameMaxLength: 30, // 自动生成的文件名的最大长度
   cacheGroups: {
    vendors: {
     test: /[\\/]node_modules[\\/]/, // 位于node_modules中的模块做代码分割
     priority: -10 // 根据优先级决定打包到哪个组里,例如一个 node_modules 中的模块进行代码
    }, // 分割,,既满足 vendors,又满足 default,那么根据优先级会打包到 vendors 组中。
    default: { // 没有 test 表明所有的模块都能进入 default 组,但是注意它的优先级较低。
     priority: -20, // 根据优先级决定打包到哪个组里,打包到优先级高的组里。
     reuseExistingChunk: true // //如果一个模块已经被打包过了,那么再打包时就忽略这个上模块
    }
   }
  }
 }
};

补充几点:

在分组中可以人为地规定打包后文件的名字,在 vendor 分组中添加 filename = "vendor.js" 之后,在 vendor 分组中打包后文件的名字都是 vendor.js 。

reuseExistingChunk  实例讲解:

// a.js
import b from './b';

// index.js
import a from './a';
import b from './b';

在上述代码中,index.js 在执行 import a from './a' 时引入 a 模块,由于 a 模块中使用了 b 模块,所以同时也引入了 b 模块。再执行 import b from './b' 时,由于 b 模块已经被打包过了,所以就会忽略掉这个 b 模块,这就是 reuseExistingChunk: true 的作用。

如果想让两个模块打包到一个文件里应该如何实现?

cacheGroup 就可以实现这个需求,假设有两个模块 module1 和 module2,且都满足 vendor 这个组,那么在进行代码分割时,会先将 module1 放到 CacheGroup 中,然后再将 module2 放到 cacheGroup 中,最后再将两者一起放到 vender 组里生成 vender.js 文件。

到此这篇关于Webpack中SplitChunksPlugin 配置参数详解的文章就介绍到这了,更多相关Webpack SplitChunksPlugin 配置内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JS对象与JSON格式数据相互转换
Feb 20 Javascript
jQuery使用数组编写图片无缝向左滚动
Dec 11 Javascript
jquery弹出层类代码分享
Dec 27 Javascript
javascript设置和获取cookie的方法实例详解
Jan 05 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
Aug 01 Javascript
基于Node的React图片上传组件实现实例代码
May 10 Javascript
Vue组件化开发思考
Feb 02 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
Dec 25 Javascript
JQuery常用选择器功能与用法实例分析
Dec 23 jQuery
vue过滤器实现日期格式化的案例分析
Jul 02 Javascript
vuex分模块后,实现获取state的值
Jul 26 Javascript
javascript使用正则表达式实现注册登入校验
Sep 23 Javascript
JS实现点星星消除小游戏
Mar 24 #Javascript
js实现小星星游戏
Mar 23 #Javascript
JS Array.from()将伪数组转换成数组的方法示例
Mar 23 #Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
Mar 23 #Javascript
小程序使用分包的示例代码
Mar 23 #Javascript
用JS实现选项卡
Mar 23 #Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
Mar 23 #Javascript
You might like
PHPMailer 中文使用说明小结
2010/01/22 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
php上传文件并存储到mysql数据库的方法
2015/03/16 PHP
php调整服务器时间的方法
2015/04/03 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
JS 继承实例分析
2008/11/04 Javascript
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
2016/09/14 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
2017/02/28 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
2019/06/24 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
[01:36]极致酷炫!TI9典藏宝瓶+撼地者至宝展示
2019/06/11 DOTA
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
对Python _取log的几种方式小结
2019/07/25 Python
python模拟实现分发扑克牌
2020/04/22 Python
Elasticsearch py客户端库安装及使用方法解析
2020/09/14 Python
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
介绍一下mysql的日期和时间函数
2013/03/28 面试题
卫生标语大全
2014/06/21 职场文书
2014和解协议书范文
2014/09/15 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
心术观后感
2015/06/11 职场文书
消防安全主题班会
2015/08/12 职场文书
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL