webpack之SplitChunksPlugin

简介: webpack之SplitChunksPlugin

SplitChunksPlugin

代码分割生成的如2.js,是自动生成的名字,如何让代码分割能生成可以识别的自定义的名字呢

使用magic comment修改chunkname

这写法的意思是异步引入一个lodash库,当代码分割的时候,将这个打包分割出来的库起chunkName(文件名)为lodash

再次打包,发现并没有生效,这是因为我们之前使用了dynamic-import-webpack,这是非官方插件,非官方插件不支持magic comment写法,因此我们需要替换这个插件

因此我们需要替换这个插件为官方插件。

在package.json中去掉

在.babelrc中去掉

将dynamic-import-webpack使替换为官方的插件

npm i @babel/plugin-syntax-dynamic-import -D

修改.babelrc

重新打包,发现magic comment生效了,但是lodash打包却变成了,verders-lodash.js,如何让其就是叫lodash.js呢?

查看webpack官方文档,找到SplitChunksPlugin,发现关于splitChunk配置很多

我们先暂时将配置中的splitChunks这样配置,重新打包,发现代码分割打包的文件名变成lodash.js了

备注:splitChunks,各个配置项中,如果不配置,将会是默认配置

接下来我们将详细介绍splitChunks的各个配置属性

①splitChunks.chunks 其有async(只对异步代码生效),initial(只对同步代码生效),all(对异步代码和同步代码都生效)

测试:

将chunks设为async,同时CodeSplitting.js注释异步引入代码,放开同步引入代码

打包,发现无lodash.js,同步引入的代码没有做代码分割

我们再将chunks设为all (异步引入模块和同步引入模块都会代码分割),再次打包

发现还是没有lodash.js,没有执行代码分割

这是因为cacheGroups需要配置一下

再次打包,出现了vendors~main.js,其将lodash打包进了这个文件中,说明执行了代码分割

叫verdors-main.js意思是代码分割,将lodash分到vendors这个组,同时它被引入的入口文件打包后的chunkName为main.js

我们还可以配置filename自由设置代码分割打包输出的文件名

备注:Chunks和cacheGroups是配合着用的

②minSize 大于多少字节,才会执行代码分割(代码分割太多会造成http请求次数过多,所以需要设置minSize)

③cacheGroups里的default组,如果设置false,那么非node_modules里的(不符合vendors组条件的)都不知道如何代码分割了,所以应该配置一下

再次打包,生成了default~main.js,意思是代码分割,将lodash分到default这个组,同时它被引入的入口文件打包后的chunkName为main.js

其也可以设置输出的文件名

④maxSize,如果超过这个大小,会对代码进行更细的代码分割

⑤minChunks,当一个模块被至少多少个chunk(打包生成 的js文件)使用过才会进行代码分割

⑥maxAsyncRequests,同时加载的模块数是多少个(即打包前5个模块会做代码分割,超过5个模块做了代码分割就不再做代码分割(减少http请求次数))

⑦maxInitialRequests,入口文件前多少个做代码分割,超过3个的入口文件就不再做代码分割(减少http请求次数))

⑧automaticNameDelimiter,文件生成的时候文件名连接符,如vendors~main.js

⑨name: true,即cacheGroups里的文件名有效

10)cacheGroups,(缓存组)碰到代码分割不急着打包,把符合vendors的统一打包到一起,符合default的统一打包到一起

11)priarity代表优先级,即如果一个模块同时符合default和vendors,vendors的优先级更高,就优先将模块打包到vendors里

12)reuseExistingChunk

如果a又使用了b,正常来说a打包进了vendors里,b也会打包进vendors里,但是打包b的时候发现b之前已经被引入过且被打包进了commin里,ReuseExistingChunk:true,b就不会再次打包进vendors里,而是直接使用

ReuseExistingChunk:true不重复打包,碰到已打包过的模块就直接使用

目录
相关文章
|
Web App开发 前端开发 JavaScript
React 之 requestIdleCallback 来了解一下
React 之 requestIdleCallback 来了解一下
1855 0
|
前端开发 JavaScript
使用JavaScript实现复杂功能:构建一个自定义的拖拽功能
使用JavaScript实现复杂功能:构建一个自定义的拖拽功能
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
7月前
|
弹性计算 安全 数据安全/隐私保护
阿里云渠道商:ECS 服务器带宽如何升级或降级?
阿里云ECS凭借弹性伸缩、高性价比、全球部署与多重安全防护,成为企业上云首选。支持带宽在线升降配,灵活应对业务变化。本文详解带宽调整步骤及注意事项,助力高效用云。
|
JSON 机器人 API
gewe微信机器人搭建教程
GeWe开放平台是基于 微信开放平台的二次封装API服务,开发者可以使用本服务来处理微信中的各种事件,并可以通过后台调用对应的 API 来驱动微信自动执行任务,如自动收发消息、自动化应答、自动群邀请、群管理等,封装了 RPA技术流程,简化开发者二次开发难度,提供了开发者与微信对接的能力,使用简单,操作快捷,支持多种语言接入。
947 17
|
消息中间件 监控 前端开发
什么时候会使用WebSockets?如何使用Spring Boot实现?
什么时候会使用WebSockets?如何使用Spring Boot实现?
723 6
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍了如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤。通过这些工具,可以显著提升编码效率和代码质量。
2907 4
vuecli3打包时开启了productionSourceMap为true却没有生成sourcemap文件?
vuecli3打包时开启了productionSourceMap为true却没有生成sourcemap文件?
800 0
|
缓存 监控 前端开发
多个异步操作对网页性能的影响及优化建议
多个异步操作会影响网页性能,主要体现在网络请求延迟、资源竞争及浏览器限制等方面,可能导致页面加载缓慢。为优化性能,可采用 `Promise.all()` 并行处理、请求合并、懒加载、缓存利用、CDN 托管、请求优化及性能监控等策略,从而提升用户体验。
|
JSON 前端开发 JavaScript
🌟前端使用Lottie实现炫酷的开关效果🌟
🌟前端使用Lottie实现炫酷的开关效果🌟