Webpack SplitChunks
代码切割与提取
前文写过 Webpack
的优化配置,本文细说其中的 SplitChunks
配置
chunks,module,bundle
module:在js中,每一个导入导出的模块
,称为module
,比如
1 | module.export = {} |
引入的文件或库,插件等
chunks:指webpack
中的配置splitChunks.chunks
,打包出来的入口文件:
1 | splitChunks: { |
bundle:由webpack
最终拆分出来的每一个包,如
为什么需要拆分包
原因在于,随着项目开发后期时可能会引入第三方包,或者本地业务代码,工具库越来越大,首屏加载速度或某页面加载速度缓慢,单个文件可能达到几M甚至几十M的可能
如何配置
首先说下splitChunks
下有哪些配置
1 | optimization:{ |
cacheGroups
外的配置为splitChunks
的全局配置,每一个cacheGroups
中配置都会使用外部的配置
例子
假设项目文件夹为
1 | |--public/ |
index.js
1 | //index.js |
a.js
1 | //a.js |
b.js
1 | //b.js |
c.js
1 | //c.js |
webpack.config.js
1 | // webpack.config.js |
不配置任何splitChunks
1 | > webpack --mode=development |
可以看到index.js
模块大小为324k,里面包含a.js,b.js,c.js,jquery
初步配置splitChunks
1 | //webpack.config.js |
结果:
1 | > webpack --mode=development |
可以看到多了common.js
模块大小为320k,里面包含a.js,b.js,c.js,jquery
添加权重priority
,并且抽离node_modules
中的第三方包
1 | optimization: { |
结果如下:
1 | > webpack --mode=development |
可以看到多出vendor.js
,大小318kb,而index.js
大小减少到6.23kb,说明jQuery已经被抽离了,同时业务逻辑代码也抽离出
抽离指定文件
在src/common
新增utils.js
,并在index.js
中引用他
1 | optimization: { |
结果如下:
1 | > webpack --mode=development |
可以看到utils.js
已经被单独抽离成一个chunks,至此已经实现抽离第三方包,业务代码,工具模块,指定模块包
结语
splitChunks
的抽离能节省许多重复代码的引入,加载。对项目大小与用户体验起到很大作用