跳到主要内容

代码分割与静动态导入

在前端开发中,我们常常需要引入各种模块和库,但是如果将所有代码都打包到一个文件中,会导致应用体积过大,加载缓慢。这时就需要进行代码分割,将不同的模块拆分成独立的文件,按需加载。

代码分割主要有两个好处:

  1. 减小应用的整体体积,提升首屏加载速度。
  2. 实现模块的懒加载,按需加载需要的模块,避免加载不必要的代码。

在 JavaScript 中,有两种导入模块的方式:静态导入和动态导入。

静态导入

静态导入是在代码编译阶段就确定了要导入的模块,并且会将其编译到最终的代码包中。语法如下:

import xxx from 'path/to/module';

静态导入的优点是简单直接,有利于代码的静态分析和 tree shaking 优化。但缺点是无法做到按需加载,导入的模块不管是否使用都会被打包。

动态导入

动态导入允许我们在运行时根据条件动态地加载模块。常见的应用场景有:

  1. 模块体积较大,使用频率较低,适合按需异步加载。
  2. 需要动态拼接模块路径的场景,比如国际化多语言支持。
  3. 根据程序逻辑或用户交互按需加载模块。

动态导入使用 import() 函数,该函数返回一个 Promise 对象,可以在 then 中获取加载的模块。例如:

import('./path/to/module').then((module) => {
// 使用加载的模块
});

import() 函数还支持动态拼接路径:

const modulePath = `./path/to/${moduleName}`
import(modulePath).then(...)

这在静态导入中是不允许的。