动态导入(import())仅在模块模式的 web worker 中可用,需创建时指定 { type: 'module' };它返回 promise,支持 await 条件加载、按需拆包,但路径须为相对或绝对 url,不支持 bare import,且必须运行于 https 或 localhost 环境。

动态导入(import())在 Web Worker 中可用,但有明确前提:Worker 必须以模块方式启动,即创建时指定 { type: 'module' }。它不能用在传统 importScripts 方式加载的 Worker 里。
必须先启用模块模式
主线程创建 Worker 时需显式声明类型:
const worker = new Worker('./calc-worker.js', { type: 'module' });- 如果用 Vite 或现代构建工具,推荐写法是:
new Worker(new URL('./calc-worker.js', import.meta.url), { type: 'module' }),避免路径解析问题 - 不加
type: 'module',Worker 就走经典模式,import()会报语法错误或直接不识别
在 Worker 文件中直接使用 import()
模块 Worker 的脚本内可自由调用 import(),它返回 Promise,支持 await:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 基础用法:
const { process } = await import('./utils.js'); - 条件加载:
if (mode === 'advanced') { const { encrypt } = await import('./crypto/aes.js'); } - 按需拆包:
const module = await import(`./parsers/${type}-parser.js`);(注意:动态路径需确保构建工具能静态分析或正确输出)
和静态 import 的关系
动态 import() 和顶部的 import 语句可共存于同一模块 Worker:
- 静态
import在 Worker 启动时预加载,构成初始模块图 - 动态
import()在运行时触发,不阻塞主线程或 Worker 初始化 - 两者都享有模块作用域隔离,不会污染全局,也不影响
self上的其他属性
注意事项与常见坑
实际使用时需留意这些细节:
-
import()路径必须是相对 URL(如'./math.js')或绝对 URL;不支持 bare import(如'lodash'),除非构建工具做了别名处理 - 模块 Worker 不允许混用
importScripts();一旦用了type: 'module',再调importScripts会抛异常 - HTTP 环境必需:模块加载要求 HTTPS 或
localhost,file://协议下会失败 - 错误处理建议包裹 try/catch:
try { const mod = await import('./feature.js'); } catch (e) { console.error('加载失败:', e); }
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










