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 相关文章推荐
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
Mar 21 Javascript
JavaScript 设计模式 安全沙箱模式
Sep 24 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
Sep 09 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
Nov 10 Javascript
微信小程序 label 组件详解及简单实例
Jan 10 Javascript
JS原型与原型链的深入理解
Feb 15 Javascript
vue通过路由实现页面刷新的方法
Jan 25 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
Mar 27 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
Apr 30 Javascript
微信小程序如何实现全局重新加载
Jun 05 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
Aug 19 Javascript
vue使用vant中的checkbox实现全选功能
Nov 17 Vue.js
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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
PHP中改变图片的尺寸大小的代码
2011/07/17 PHP
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
2013/08/10 PHP
Smarty局部缓存的几种方法简介
2014/06/17 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
Laravel 5.3 学习笔记之 错误&日志
2016/08/28 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
jquery Validation表单验证使用详解
2020/09/12 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
详解封装基础的angular4的request请求方法
2018/06/05 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
centos下更新Python版本的步骤
2013/02/12 Python
Python的requests网络编程包使用教程
2016/07/11 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
Python的pygame安装教程详解
2020/02/10 Python
基于HTML5陀螺仪实现ofo首页眼睛移动效果的示例
2017/07/31 HTML / CSS
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
优秀毕业大学生推荐信
2013/11/13 职场文书
司机职责范本
2014/03/08 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
工程售后服务方案
2014/06/08 职场文书
创业计划书之面包店
2019/09/17 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers
Python 可迭代对象 iterable的具体使用
2021/08/07 Python