返回顶部
首页 > 资讯 > 前端开发 > VUE >webpack4中splitChunk插件有什么用
  • 291
分享到

webpack4中splitChunk插件有什么用

2024-04-02 19:04:59 291人浏览 泡泡鱼
摘要

这篇文章主要介绍webpack4中splitChunk插件有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!常用参数minSize(默认是30000):形成一个新代码块最小的体积

这篇文章主要介绍webpack4中splitChunk插件有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

常用参数

  • minSize(默认是30000):形成一个新代码块最小的体积

  • minChunks(默认是1):在分割之前,这个代码块最小应该被引用的次数(译注:保证代码块复用性,默认配置的策略是不需要多次引用也可以被分割)

  • maxInitialRequests(默认是3):一个入口最大的并行请求数

  • maxAsyncRequests(默认是5):按需加载时候最大的并行请求数。

  • chunks (默认是async) :initial、async和all

  • test: 用于控制哪些模块被这个缓存组匹配到。原封不动传递出去的话,它默认会选择所有的模块。可以传递的值类型:RegExp、String和Function

  • name(打包的chunks的名字):字符串或者函数(函数可以根据条件自定义名字)

  • priority :缓存组打包的先后优先级。

如果你对这些配置还是不熟悉的话,一拉到底,看看文档

正文

先总览一下所有配置,后续会根据demo跑一遍常见的需求。

optimization: {
 splitChunks: {
  chunks: "async", // 必须三选一: "initial" | "all"(推荐) | "async" (默认就是async)
  minSize: 30000, // 最小尺寸,30000
  minChunks: 1, // 最小 chunk ,默认1
  maxAsyncRequests: 5, // 最大异步请求数, 默认5
  maxInitialRequests : 3, // 最大初始化请求书,默认3
  automaticNameDelimiter: '~',// 打包分隔符
  name: function(){}, // 打包后的名称,此选项可接收 function
  cacheGroups:{ // 这里开始设置缓存的 chunks
   priority: 0, // 缓存组优先级
   vendor: { // key 为entry中定义的 入口名称
    chunks: "initial", // 必须三选一: "initial" | "all" | "async"(默认就是async) 
    test: /React|lodash/, // 正则规则验证,如果符合就提取 chunk
    name: "vendor", // 要缓存的 分隔出来的 chunk 名称 
    minSize: 30000,
    minChunks: 1,
    enforce: true,
    maxAsyncRequests: 5, // 最大异步请求数, 默认1
    maxInitialRequests : 3, // 最大初始化请求书,默认1
    reuseExistinGChunk: true // 可设置是否重用该chunk
   }
  }
 }
 },

接下来看看第一个例子

entry: {
		pageA: "./pageA", // 引用utility1.js utility2.js
		pageB: "./pageB", // 引用utility2.js utility3.js
		pageC: "./pageC" // 引用utility2.js utility3.js
	},
	
	optimization: {
		splitChunks: {
			cacheGroups: {
				commons: {
					chunks: "initial",
					minChunks: 2,
					maxInitialRequests: 5, // The default limit is too small to showcase the effect
					minSize: 0 // This is example is too small to create commons chunks
				}
			}
		}
	},

结果如图,一切都很正常 commons~pageA~pageB~pageC.js 文件就是utility2.js commons~pageB~pageC.js,根据上述代码,这里的utility2被引用了三次,首先就被抽离了commons~pageA~pageB~pageC.js,然后utility3被引用了两次就放到了commons~pageB~pageC.js,最后只剩下被引用一次的utility1.js,就直接放到了pageA.js里面,如果这里的utility1.js的也是两次,他还是会新建一个chunk放进去,而不是合并到commons~pageB~pageC.js,除非同入口引用才会合并。

mpageA.js pageB.js pageC.js

webpack4中splitChunk插件有什么用

这里有个地方是需要优化一下的,就是pageA.js pageB.js pageC.js的代码不多,但是打出来的包很大,肯定是一些WEBpack的运行文件,直接加上runtimeChunk

 runtimeChunk: "single"
 // 等价于
 runtimeChunk: {
  name: "manifest"
 }

现在就好了

webpack4中splitChunk插件有什么用

引用第三方模块 pageA引用vue.js pageB引用react react-dom

vendor: {
		test: /node_modules/,
		chunks: "initial",
		name: "vendor",
		priority: 10,
		enforce: true
	}

但是,这样子的话,会把pageA pageB pageC所有的库都打包到一起vendor.js

webpack4中splitChunk插件有什么用

假如我想拆分这个vendor.js为pageA-vendor.js pageB-vendor.js怎么办,我试了很久,试出一个最简单的办法,去掉手动的vendor,让插件自动处理。

splitChunks: {
  chunks: "all",
  cacheGroups: {
				commons: {
					chunks: "initial",
					minChunks: 2,
					maxInitialRequests: 5, // The default limit is too small to showcase the effect
					minSize: 0 // This is example is too small to create commons chunks
				}
			}
		},

webpack4中splitChunk插件有什么用

后来,我把webpack mode改成production后,发现不管用了,同样的配置,在生产模式下,打包出来的东西有点匪夷所思,vendor-pageB.js被合并到了pageB.js里面了。

webpack4中splitChunk插件有什么用

后来我折腾了好久也分析不出来为什么,自己折腾出来一种方式,还是老子手动来吧,自动化一边去

 commons: {
   chunks: "initial",
   minChunks: 2,
   maxInitialRequests: 5, // The default limit is too small to showcase the effect
   minSize: 0 // This is example is too small to create commons chunks
	},
  'vendor-pageA': {
   test: /Vue/, // 直接使用 test 来做路径匹配
   chunks: "initial",
   name: "vendor-pageA",
   enforce: true,
  },
  'vendor-pageB': {
   test: /react/, // 直接使用 test 来做路径匹配
   chunks: "initial",
   name: "vendor-pageB",
   enforce: true,
  },

成功打包出来了自己想要的东西。

webpack4中splitChunk插件有什么用

动态引入

动态引入大家应该都不陌生,就是大家所说的懒加载,直接在pageA和pageB页面里动态引入common-async.js,在这里我先说说,splitChunk应该是可以自动化处理类似commonChunk里的async,child等情况的。

import("./common-async").then(common => {
 console.log(common);
})

还不错,成功打包出来了

webpack4中splitChunk插件有什么用

这时候再试试,在这个common-async.js里面在引入共同的代码f.js,看看会不会重复打包

webpack4中splitChunk插件有什么用

f.js成功的被抽离出来了,其他文件也没有被重复打包,挺好的。

webpack4中splitChunk插件有什么用

注意的地方

  • cacheGroups 会继承和覆盖splitChunks的配置项,但是test、priorty和reuseExistingChunk只能用于配置缓存组。。

  • cacheGroups 里的每一项最好都要加上chunks参数,不然可能打包不出来你想要的东西。

  • minSize 默认是30KB(注意这个体积是压缩之前的)在小于30kb的情况下一定要设置一个值,否则也可能打包不出来你想要的东西,而且这东西要加在cacheGroups里面。

  • priority 在某些情况下,还是挺有用的,可以设置打包chunks的优先级。

上面的例子里面配置了一个commons,这里的name可以自己设置,也可以不设置,我是没设置的,你可以试试设置了是什么样子的,然后你就会明白这个name其实在某些情况下还是不设置的比较好。

 commons: {
   	chunks: "initial",
		minChunks: 2,
		maxInitialRequests: 5, // The default limit is too small to showcase the effect
		minSize: 0 ,
		name: "commons"
  },

以上是“webpack4中splitChunk插件有什么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网VUE频道!

--结束END--

本文标题: webpack4中splitChunk插件有什么用

本文链接: https://lsjlt.com/news/75278.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • webpack4中splitChunk插件有什么用
    这篇文章主要介绍webpack4中splitChunk插件有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!常用参数minSize(默认是30000):形成一个新代码块最小的体积...
    99+
    2024-04-02
  • ngAnimate插件有什么用
    这篇文章主要介绍ngAnimate插件有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!ngAnimate插件是做什么的?ngAnimate插件如其名字一样是为元素提供动画的。怎...
    99+
    2024-04-02
  • jQuery中Pagination分页插件有什么用
    小编给大家分享一下jQuery中Pagination分页插件有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!插件简介此j...
    99+
    2024-04-02
  • jQuery中的validation插件有什么作用
    本篇内容介绍了“jQuery中的validation插件有什么作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2024-04-02
  • js插件Swiper有什么用
    小编给大家分享一下js插件Swiper有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! Sw...
    99+
    2024-04-02
  • gulp-changed插件有什么用
    这篇文章将为大家详细讲解有关gulp-changed插件有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言gulp-changed插件的作用,是用来过滤未被修改过...
    99+
    2024-04-02
  • jQuery插件ajaxFileUpload有什么用
    jQuery插件ajaxFileUpload是用于实现文件上传功能的插件。通过使用ajaxFileUpload插件,可以在不刷新页面...
    99+
    2023-08-18
    jQuery ajaxFileUpload
  • react有什么插件
    这篇文章主要介绍了react有什么插件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇react有什么插件文章都会有所收获,下面我们一起来看看吧。 r...
    99+
    2024-04-02
  • golang跳转插件是什么?有什么用?
    随着计算机科学和编程语言的不断发展,开发人员需要掌握不同的技术和工具,以便更好地处理他们的工作。Go语言(也称为Golang)是一种快速、高效的编程语言,它可以轻松地处理大量数据、多线程和网络通信。在Golang中,跳转是一项基本任务,可以...
    99+
    2023-05-14
  • jquery中ajaxfileupload异步上传插件有什么用
    这篇文章主要介绍jquery中ajaxfileupload异步上传插件有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下服务器端采用struts2来处理文件上传。所需...
    99+
    2024-04-02
  • PostgreSQL的插件pg_variables有什么作用
    本篇内容主要讲解“PostgreSQL的插件pg_variables有什么作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PostgreSQL的插件pg_va...
    99+
    2024-04-02
  • TBProAudio SLM2 for Mac插件有什么用
    小编给大家分享一下TBProAudio SLM2 for Mac插件有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!TBProAudio SLM2是一款智能立体声响度最大化器,包括“...
    99+
    2024-04-02
  • Google开源Eclipse插件有什么用
    本篇内容介绍了“Google开源Eclipse插件有什么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Google的Eclipse插件GP...
    99+
    2023-06-17
  • Eclipse的插件MyBatis Editor有什么用
    这篇文章将为大家详细讲解有关Eclipse的插件MyBatis Editor有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MyBatis Editor是一个Eclipse的插件,用来编辑MyBat...
    99+
    2023-06-17
  • Paint Stick for Mac插件有什么用
    这篇文章主要介绍Paint Stick for Mac插件有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!PAInt Stick for Mac版官方介绍PAInt&Stick,坚持现场演出!直接与您的自定义画...
    99+
    2023-06-02
  • MatrixOne的Eclipse插件MxEclipse有什么用
    这篇文章将为大家详细讲解有关MatrixOne的Eclipse插件MxEclipse有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MX-Eclipse 0.9.2有了这个插件以后写eMatrix ...
    99+
    2023-06-03
  • vue中vue-meta插件有什么特点
    vue-meta的特点有:能够支持SSR。在组件内设置metaInfo能够实现头部标签管理。metaInfo中数据都是响应的,如果数据变化,头部信息会自动更新。...
    99+
    2024-04-02
  • Vue中的插件和组件有什么区别
    这篇文章主要介绍了Vue中的插件和组件有什么区别的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue中的插件和组件有什么区别文章都会有所收获,下面我们一起来看看吧。一、组件是什么回顾以前对组件的定义:组件就是把...
    99+
    2023-06-30
  • Vue中插槽slot有什么用
    这篇文章主要为大家展示了“Vue中插槽slot有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中插槽slot有什么用”这篇文章吧。什么是插槽?我们知道在Vue中 Child 组件的标...
    99+
    2023-06-15
  • Vue中slot插槽有什么用
    小编给大家分享一下Vue中slot插槽有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.作用:让父组件可以向子组件指定位置插入html结构,也是一种组件间...
    99+
    2023-06-25
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作