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不重复打包,碰到已打包过的模块就直接使用

目录
相关文章
|
2月前
|
JavaScript 前端开发
webpack快速使用
webpack快速使用
171 63
|
6月前
|
前端开发 JavaScript
webpack使用
webpack使用
|
6月前
|
前端开发 JavaScript Linux
|
6月前
|
JSON JavaScript 前端开发
Webpack详解(二)
Webpack详解
182 0
|
11月前
|
JavaScript 前端开发
webpack
webpack
57 0
webpack
|
JSON 缓存 前端开发
webpack相关详细讲解。
webpack相关详细讲解。
|
JavaScript 前端开发
从了解到使用webpack
Webpack本质上是一种前端资源编译,打包工具
103 0
|
前端开发 JavaScript
关于 Webpack 的介绍,什么是 Webpack?
Webpack 是一款现代化的前端构建工具,它可以将你的项目中的多个 JavaScript 模块打包成一个或多个 bundle 文件,同时还可以处理各种类型的静态资源,比如 CSS、图片等等。 Webpack 最初是由 Tobias Koppers 开发的,目前已经成为了前端开发中使用最广泛的构建工具之一。
152 0
|
缓存 算法
webpack的chunkFilename详细说明
webpack的chunkFilename详细说明
263 0
|
缓存 JavaScript 前端开发
Webpack
本质上,*webpack* 是一个现代 JavaScript 应用程序的*静态模块打包器(module bundler)*。当 webpack 处理应用程序时,它会递归地构建一个*依赖关系图(dependency graph)*,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 *bundle*。
Webpack