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不重复打包,碰到已打包过的模块就直接使用
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值