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 相关文章推荐
TreeView 用法(有代码)(asp.net)
Jul 15 Javascript
autoPlay 基于jquery的图片自动播放效果
Dec 07 Javascript
js判断变量是否未定义的代码
Mar 28 Javascript
.NET微信公众号开发之创建自定义菜单
Jul 16 Javascript
Javascript实现网络监测的方法
Jul 31 Javascript
js实现人民币大写金额形式转换
Apr 27 Javascript
JS实现根据文件字节数返回文件大小的方法
Aug 02 Javascript
AngularJS删除路由中的#符号的方法
Sep 20 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
Dec 19 Javascript
vue.js单文件组件中非父子组件的传值实例
Sep 13 Javascript
vue props 一次传多个值实例
Jul 22 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
Nov 04 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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
ubuntu下配置nginx+php+mysql详解
2015/09/10 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
了解Javascript的模块化开发
2015/03/02 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
Angular6 用户自定义标签开发的实现方法
2019/01/08 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
2020/02/09 Javascript
[01:32]寻找你心中的那团火 DOTA2 TI9火焰传递活动今日开启
2019/05/16 DOTA
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
pandas求两个表格不相交的集合方法
2018/12/08 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
详解Python 循环嵌套
2020/07/09 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
美国在线工具商店:Acme Tools
2018/06/26 全球购物
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
员工自我鉴定
2013/10/09 职场文书
军训学生自我鉴定
2014/02/12 职场文书
大课间体育活动方案
2014/03/12 职场文书
奥巴马获胜演讲稿
2014/05/15 职场文书
2014高考励志标语
2014/06/05 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
临时用工协议书范本
2014/10/29 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python
MySQL数据库必备之条件查询语句
2021/10/15 MySQL
教你nginx跳转配置的四种方式
2022/07/07 Servers