ES6 动态加载 import
ES6 提供了动态 import() 函数:调用时返回一个 Promise,异步加载模块;与静态 import 不同,它可以在任意位置、任意条件中使用。
import("lodash").then(_ => {
// Do something with lodash (a.k.a '_')...
});
常见用法
- 按需加载:根据路由或用户操作动态加载对应组件,常用于代码分割(code splitting)。
- 条件加载:根据平台、判断条件决定加载哪个模块。
- 与
async/await配合:
async function load() {
const { default: moment } = await import('moment');
return moment().format('YYYY-MM-DD');
}
补充:动态
import()的几个关键点:
- 本质上会被 webpack/rollup/vite 等打包工具识别为异步代码分割点,自动拆出一个独立 chunk。
- 与静态
import不同,动态import()接受任意字符串表达式,所以拼接路径时要小心路径注入风险(建议通过白名单校验)。 - 返回的 Promise resolve 的是模块命名空间对象,所以解构时要通过
default或具名导出。 - 在浏览器中使用时,注意
Content-Type必须为application/javascript,否则会拒绝执行。
来源整理自:vue3js.cn 面试官系列



