Webpack高级 17 -- Code Split

150 阅读2分钟

1 . Why?

打包代码时将所有 js 文件打包到一个文件里,体积太大了,我们如果只要渲染首页,就应该只加载首页的 js 文件,其他文件不应该加载。

所以我们需要将打包生成的文件进行代码分割,生成多个 js 文件,渲染哪个页面就只加载某个 js 文件。

2 . 是什么?

Code Split 只做了两件事:

  • 分割文件:将打包生成的文件进行分割,生成多个 js 文件。
  • 按需加载:需要哪个文件就加载哪个文件。

3 . 配置多个入口文件:

1097.png

注意:

有几个入口文件,就会有几个打包输出文件!!!!!(注意出口文件name的设置。)

3 . 1 多入口提取公共模块:

如果多个入口文件同时引用了一个 js 文件下的内容。我们可以将这个 js 文件单独打包,然后在各个入口文件中引用,而不是重复打包好几次!!!

  • 修改配置

1098.png

4 . 多入口,动态按需加载

需要用时再加载。例如我们把函数定义在一个 js 文件中,然后在入口文件中引入,但我们并不是渲染出来就使用,而是触发某个事件后使用,我们就可以当触发这个事件后再进行引入加载。

  • 修改文件引入:(改成动态引入)

1099.png

        - import动态引入返回一个 Promise 对象,.then((res)=>{}) ,在res对象中的default属性是文件中的函数!!!

5 . 单入口文件

如果我们的项目是单入口文件,还想实现Code Split功能,应该怎样配置!!!

1101.png

因为是单入口文件,所以其他配置都用不上了。默认配置就可以实现,共模块单独加载按需加载....

注意:

1102.png

Eslint 默认不支持动态导入 import 语法。需要在eslintrc.js中进行配置。

1103.png

6 . 给模块命名

如果不给模块文件打包后的输出文件进行命名,那么默认就会是一串数字。

用 webpack 魔法命名:

  • 在 import 动态引入处进行命名

1105.png

  • 在 webpack 配置,输出文件名处进行配置:

1104.png

7 . 统一命名

  • 对于图片 、logo等资源可以采用统一命名的方式,就不用一一去配置。

1106.png

  • 对于 css 文件,可以改成下列命名配置。这样如果 css 也有多个入口文件,或者也有模块单独打包就可以用上!!!

1107.png