web worker 中使用 es 模块需创建时传入 { type: 'module' },worker 脚本中可顶层 import 相对或绝对 url 模块,路径不可省略 .js 后缀,不支持裸模块名;模块作用域隔离,通信仍依赖 postmessage()。

在 Web Worker 中使用 ES 模块(ESM)导入依赖,核心是让 Worker 脚本以模块方式加载,并遵守 ESM 的静态解析规则。不能直接用 import 语句写在普通 Worker 里,必须显式启用模块支持。
Worker 创建时指定 type="module"
主线程创建 Worker 实例时,需传入 { type: 'module' } 配置项。这是启用 ESM 的前提,否则会报 Cannot use import statement outside a module 错误。
- 正确写法:
new Worker('./worker.js', { type: 'module' }) - 错误写法:
new Worker('./worker.js')(默认为 classic 类型,不支持 import)
Worker 脚本中直接使用 import 语句
Worker 文件(如 worker.js)内部可像普通模块一样写 import,但必须满足 ESM 规则:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
import必须出现在顶层作用域,不能在 if、函数或循环内 - 路径必须是相对 URL(如
'./utils.js')或绝对 URL,不能省略.js后缀 - 不支持裸模块名(如
'lodash'),除非构建工具(如 Vite/Webpack)做了重写或别名处理
注意通信与作用域隔离
Worker 中的 import 加载的是独立模块实例,与主线程不共享作用域。导出的函数或类仅在 Worker 内部可用,主线程无法直接访问。数据交互仍需通过 postMessage() 和 onmessage 完成。
- 例如:Worker 导入
./math.js并调用add(),结果再发回主线程 - 不能在 Worker 里操作 DOM 或使用
window、document等 API
构建环境中的兼容性补充
若项目使用 Webpack、Vite 等工具,推荐配合 worker-plugin 或原生 new Worker(..., { type: 'module' }) + 构建配置支持。这些工具能自动打包 Worker 依赖、处理路径别名、注入 polyfill(如需兼容旧浏览器)。
- Vite 默认支持
type: 'module'Worker,无需额外配置 - Webpack 需启用
experiments.topLevelAwait = true并确保 output.libraryType 适配 - 避免在 Worker 中直接
importNode.js 内置模块(如fs),浏览器环境不可用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










