代码分割的基本思想是分包,然后按需加载!!【项目运行时用到哪个模块,再加载该模块】
<1> Why need Code Spliting ?
webpack 默认会把所有代码打包在一起。如果应用复杂,那么打包结果就会特别大,而浏览器一开始加载,就只能全部加载,那么就会浪费掉许多流量和带宽!!
<2> Code Splitting 的两种方式:
(1) 多入口打包
多入口打包的话,像我们通常使用的多页面式开发,那就是一个页面对应一个打包入口!!然后公共部分单独提取!!
配置多入口、多出口:
-
entry 多入口的配置,需要以对象的形式配置
-
对于输出的配置
- [name].bundle.js - 这样生成的文件名就默认是 entry 配置的对象的键值
配置按需加载:
用chunks属性来配置每个 html 需要引入打包好的的 js 模块!!
配置提取公共代码单独打包成 bundle:
有些页面用到了公共代码,这时候为了尽可能减小代码体积,需要把所有公共部分单独打包成一个 bundle!!!
在 optimization 中进行配置: 【splitChunks】
配置后,会自动把所有的公共模块提取到单独的 bundle 中!!
(2) 动态导入
使用 ES Module 的动态导入 import() 方法,实现动态导入。【动态导入的模块会被自动分包】!!
使用动态导入打包生成的文件名字处理:
-
使用动态导入实现按需加载的话,打包输出的文件名默认是以序号命名的,如果想手动指定名字:
- 可以使用魔法注释:Magic Comments
注意:
像 react 这样的单页面应用开发框架,它的通过路由映射组件,就已经实现了按需加载!!!