代码分割 Code Splitting

79 阅读2分钟

代码分割的基本思想是分包,然后按需加载!!【项目运行时用到哪个模块,再加载该模块】

<1> Why need Code Spliting ?

webpack 默认会把所有代码打包在一起。如果应用复杂,那么打包结果就会特别大,而浏览器一开始加载,就只能全部加载,那么就会浪费掉许多流量和带宽!!

<2> Code Splitting 的两种方式:

2296.png

(1) 多入口打包

多入口打包的话,像我们通常使用的多页面式开发,那就是一个页面对应一个打包入口!!然后公共部分单独提取!!

2297.png

配置多入口、多出口:

  • entry 多入口的配置,需要以对象的形式配置

  • 对于输出的配置

        - [name].bundle.js
        - 这样生成的文件名就默认是 entry 配置的对象的键值
    

配置按需加载:

2298.png

chunks属性来配置每个 html 需要引入打包好的的 js 模块!!

配置提取公共代码单独打包成 bundle:

有些页面用到了公共代码,这时候为了尽可能减小代码体积,需要把所有公共部分单独打包成一个 bundle!!!

在 optimization 中进行配置: 【splitChunks】

2299.png

配置后,会自动把所有的公共模块提取到单独的 bundle 中!!

2300.png

(2) 动态导入

使用 ES Module 的动态导入 import() 方法,实现动态导入。【动态导入的模块会被自动分包】!!

2301.png

2302.png

使用动态导入打包生成的文件名字处理:

  • 使用动态导入实现按需加载的话,打包输出的文件名默认是以序号命名的,如果想手动指定名字:

           - 可以使用魔法注释:Magic Comments
    

2303.png

2304.png

注意:

像 react 这样的单页面应用开发框架,它的通过路由映射组件,就已经实现了按需加载!!!