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 相关文章推荐
js 获取屏幕各种宽高的方法(浏览器兼容)
May 15 Javascript
js获取多个tagname的节点数组
Sep 22 Javascript
js charAt的使用示例
Feb 18 Javascript
checkbox选中与未选中判断示例
Aug 04 Javascript
浅谈jQuery事件绑定原理
Jan 02 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
Jun 15 Javascript
JavaScript异步加载问题总结
Feb 17 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
Sep 25 Javascript
使用Vuex解决Vue中的身份验证问题
Sep 28 Javascript
浅谈webpack devtool里的7种SourceMap模式
Jan 14 Javascript
让IDE识别webpack的别名alias的实现方法
May 06 Javascript
VUE : vue-cli中去掉路由中的井号#操作
Sep 04 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
php4与php5的区别小结(配置异同)
2011/12/20 PHP
php检测图片木马多进制编程实践
2013/04/11 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
2015/10/09 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
2016/01/19 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
详解Vue2.5+迁移至Typescript指南
2019/08/01 Javascript
Vue项目中如何使用Axios封装http请求详解
2019/10/23 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
Python实现身份证号码解析
2015/09/01 Python
八大排序算法的Python实现
2021/01/28 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
使用python将大量数据导出到Excel中的小技巧分享
2018/06/14 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
python3中替换python2中cmp函数的实现
2019/08/20 Python
python模块如何查看
2020/06/16 Python
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
ET Mall东森购物网:东森严选
2017/03/06 全球购物
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
我的五年职业生涯规划
2014/01/23 职场文书
小学教师师德感言
2014/02/10 职场文书
法制宣传标语集锦
2014/06/25 职场文书
私用公车造成事故检讨书
2014/11/16 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
高中家长意见怎么写
2015/06/03 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js