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 相关文章推荐
SWFObject 2.1以上版本语法介绍
Jul 10 Javascript
jquery自动将form表单封装成json的具体实现
Mar 17 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
May 06 Javascript
从零学JS之你需要了解的几本书
May 19 Javascript
JavaScript中用let语句声明作用域的用法讲解
May 20 Javascript
jQuery排序插件tableSorter使用方法
Feb 10 Javascript
jQuery查找dom的几种方法效率详解
May 17 jQuery
详解tween.js 中文使用指南
Jan 05 Javascript
Vue中computed与methods的区别详解
Mar 24 Javascript
解决angular2 获取到的数据无法实时更新的问题
Aug 31 Javascript
Vue根据条件添加click事件的方式
Nov 09 Javascript
Vue实现指令式动态追加小球动画组件的步骤
Dec 18 Vue.js
详解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
FCKeditor的安装(PHP)
2007/01/13 PHP
php下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
Smarty缓存机制实例详解【三种缓存方式】
2019/07/20 PHP
基于jQuery的js分页代码
2010/06/10 Javascript
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
Vue数据双向绑定的深入探究
2018/11/27 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
JS的时间格式化和时间戳转换函数示例详解
2020/07/27 Javascript
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
python复制文件代码实现
2013/12/23 Python
Python编写生成验证码的脚本的教程
2015/05/04 Python
python3去掉string中的标点符号方法
2019/01/22 Python
python实现飞机大战游戏
2020/10/26 Python
选择Python写网络爬虫的优势和理由
2019/07/07 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
Python更换pip源方法过程解析
2020/05/19 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
一些PHP的面试题
2015/05/06 面试题
自荐书封面下载
2013/11/29 职场文书
《夏夜多美》教学反思
2014/02/17 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
员工生日会策划方案
2014/06/14 职场文书
组工干部对照检查材料
2014/08/25 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
呼兰河传读书笔记
2015/06/30 职场文书
家长会感言
2015/08/01 职场文书
深入理解python多线程编程
2021/04/18 Python
sql中mod()函数取余数的用法
2021/05/29 SQL Server
java中用float时,数字后面加f,这样是为什么你知道吗
2021/09/04 Java/Android
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL