webpack4之SplitChunksPlugin使用指南


Posted in Javascript onJune 12, 2018

写在前面

前面写了一篇有关webpack4的不完全升级指南以及在webpack3.x迁移的时候遇到的问题,有兴许可以看一下。

0. 参数介绍

先对参数有一个大概的认识,虽然撸了很多遍官方的更新文档,但是还是去参看了一下新的wbepack源码,下面是各种参数及含义:

  1. chunks: 表示显示块的范围,有三个可选值:initial(初始块)、async(按需加载块)、all(全部块),默认为all;
  2. minSize: 表示在压缩前的最小模块大小,默认为0;
  3. minChunks: 表示被引用次数,默认为1;
  4. maxAsyncRequests: 最大的按需(异步)加载次数,默认为1;
  5. maxInitialRequests: 最大的初始化加载次数,默认为1;
  6. name: 拆分出来块的名字(Chunk Names),默认由块名和hash值自动生成;
  7. cacheGroups: 缓存组。

对于缓存组是一个对象,处了可以有上面的chunksminSizeminChunksmaxAsyncRequestsmaxInitialRequestsname外,还有其他的一些参数:

如果不在缓存组中重新赋值,缓存组默认继承上面的选项,但是还有一些参数是必须在缓存组进行配置的。

  1. priority: 表示缓存的优先级;
  2. test: 缓存组的规则,表示符合条件的的放入当前缓存组,值可以是functionbooleanstringRegExp,默认为空;
  3. reuseExistingChunk: 表示可以使用已经存在的块,即如果满足条件的块已经存在就使用已有的,不再创建一个新的块。

1. 基本使用

首先,在新版本的webpack会默认对代码进行拆分,拆分的规则是:

  1. 模块被重复引用或者来自node_modules中的模块
  2. 在压缩前最小为30kb
  3. 在按需加载时,请求数量小于等于5
  4. 在初始化加载时,请求数量小于等于3

小于30kb的模块不值得再单独发送一次请求,在很小的模块的前提下,相比与多次打包,减少请求次数成本要低。

当然也可以不使用默认的配置,比如这样:

new webpack.optimize.SplitChunksPlugin({
  chunks: "all",
  minSize: 20000,
  minChunks: 1,
  maxAsyncRequests: 5,
  maxInitialRequests: 3,
  name: true
)}

上面的代码就表示,在所有代码中,引用模块大小最小为20kb,引用次数最少为1次,按需加载最大请求次数为5,初始化加载最大请求次数为3的所有模块就行拆分到一个单独的代码块中,name表示代码的名字,设置为true则表示根据模块和缓存组秘钥自动生成。

2. 使用缓存组(Cache Groups)

如果想继续细分代码,可以使用缓存组(Cache Groups)。同样的,缓存组也有默认的配置;缓存组默认将node_modules中的模块拆分带一个叫做vendors的代码块中,将最少重复引用两次的模块放入default中。

这是一段官方里面的代码:

splitChunks: {
  chunks: "async",
  minSize: 30000,
  minChunks: 1,
  maxAsyncRequests: 5,
  maxInitialRequests: 3,
  name: true,
  cacheGroups: {
    default: {
      minChunks: 2,
      priority: -20
      reuseExistingChunk: true,
    },
    vendors: {
      test: /[\\/]node_modules[\\/]/,
      priority: -10
    }
  }
}

上面是缓存组的默认配置,可以通过default:false禁用默认的缓存组,然后就可以自定义缓存组,将初始化加载时被重复引用的模块进行拆分,就像这样:

cacheGroups: {
  commons: {
    name: "commons",
    chunks: "initial",
    minChunks: 2
  }
}

之后就随心所欲,可以根据具体的需求,创建多个缓存组:

cacheGroups: {
  a: {
    // ...
  },
  b: {
    // ...
  }
  // ...
}

写在后面

webpack更新已经过了很多天了,最近算是把更新的基本都过了一遍,在此记录以便日后查看,理解有问题的地方还请不吝赐教。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中的细节分析
Jun 30 Javascript
javascript实现简单加载随机色方块
Dec 25 Javascript
jquery实现(textarea)placeholder自动换行
Dec 22 Javascript
jquery Ajax 全局调用封装实例详解
Jan 16 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
Jun 13 Javascript
angularjs $http调用接口的方式详解
Aug 13 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
Nov 15 Javascript
Vue框架下引入ActiveX控件的问题解决
Mar 25 Javascript
什么时候不能在 Node.js 中使用 Lock Files
Jun 24 Javascript
使用微信SDK自定义分享的方法
Jul 03 Javascript
微信小程序实现watch监听
Jun 04 Javascript
关于JavaScript中异步/等待的用法与理解
Nov 18 Javascript
详解webpack4升级指南以及从webpack3.x迁移
Jun 12 #Javascript
webpack分离css单独打包的方法
Jun 12 #Javascript
详解extract-text-webpack-plugin 的使用及安装
Jun 12 #Javascript
webpack 样式加载的实现原理
Jun 12 #Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
Jun 12 #Javascript
webpack项目轻松混用css module的方法
Jun 12 #Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
Jun 11 #Javascript
You might like
php对称加密算法示例
2014/05/07 PHP
php中curl和file_get_content的区别
2014/05/10 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
Node.js制作简单聊天室
2017/01/12 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
2019/10/12 Javascript
Python函数中的函数(闭包)用法实例
2016/03/15 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
Python for循环生成列表的实例
2018/06/15 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
2018/06/26 Python
TensorFlow Session使用的两种方法小结
2018/07/30 Python
Python2和Python3.6环境解决共存问题
2018/11/09 Python
python代码编写计算器小程序
2020/03/30 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
html标签之Object和EMBED标签详解
2013/07/04 HTML / CSS
介绍一下游标
2012/01/10 面试题
介绍一下.NET构架下remoting和webservice
2014/05/08 面试题
销售岗位职责范本
2014/06/12 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
春节晚会开场白
2015/05/29 职场文书
党支部综合考察意见
2015/06/01 职场文书
考试后的感想
2015/08/07 职场文书
烈士陵园扫墓感想
2015/08/07 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
一文带你探究MySQL中的NULL
2021/11/11 MySQL
GoFrame框架数据校验之校验结果Error接口对象
2022/06/21 Golang