动态导入是 JavaScript 中一种按需加载模块的技术,它允许你在运行时异步地加载模块,而不是在代码初始化时就静态地导入所有模块。
动态导入使用 import()
函数,它返回一个 Promise:
import('./module.js')
.then(module => {
// 使用模块
module.doSomething();
})
.catch(err => {
// 处理加载错误
console.error('模块加载失败:', err);
});
或者使用 async/await 语法:
async function loadModule() {
try {
const module = await import('./module.js');
module.doSomething();
} catch (err) {
console.error('模块加载失败:', err);
}
}
// 在路由变化时动态加载对应组件
router.beforeEach(async (to, from, next) => {
const component = await import(`./views/${to.name}.vue`);
// ...
});
if (user.needsAdvancedFeature) {
const advancedModule = await import('./advanced.js');
advancedModule.init();
}
document.getElementById('btn').addEventListener('click', async () => {
const heavyModule = await import('./heavyModule.js');
heavyModule.run();
});
特性 | 静态导入 (import ... from ) |
动态导入 (import() ) |
---|---|---|
加载时机 | 编译时/初始化时 | 运行时 |
语法 | 声明式 | 函数调用 |
返回值 | 同步 | Promise |
使用场景 | 主包必需的模块 | 按需加载的模块 |
代码分割 | 通常包含在主包中 | 可生成单独 chunk |
动态导入是优化应用性能的重要工具,特别是在大型应用中,可以显著减少初始加载时间。