Worker线程支持ES Modules,需创建时传入{type:"module"}选项;worker.js可使用import、动态import()等,路径须为相对或完整URL,不支持bare specifiers;通信仍用postMessage/onmessage。

在 Worker 线程中使用 ES Modules 是完全支持的,但需要显式启用模块模式,不能像主页面那样直接靠 <script type="module"> 触发。关键在于创建 Worker 时传入 type: "module" 选项。
创建模块型 Worker
使用 Worker 构造函数时,第二个参数需传入配置对象,并指定 type: "module":
const worker = new Worker('./worker.js', { type: 'module' });
此时 worker.js 内部就可以正常使用 import 语句,包括相对路径、NPM 包(需构建工具或运行时支持)、动态 import() 等。
模块 Worker 的 import 规则
与主脚本一致,但注意以下几点:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
立即学习“Java免费学习笔记(深入)”;
- 路径必须是完整 URL 或以
./、../开头的相对路径(不能省略./) - 不支持 bare specifiers(如
import { foo } from 'lodash'),除非运行环境提供模块解析(如 Vite、Webpack、Node.js 20+ 的node --experimental-worker-modules) - 动态
import()在模块 Worker 中可用,且返回 Promise,可用于按需加载
与主线程通信仍用 postMessage
模块 Worker 和普通 Worker 的通信方式完全一样,仍通过 postMessage 和 onmessage:
// worker.js
import { processData } from './utils.js';
self.onmessage = ({ data }) => {
const result = processData(data);
self.postMessage(result);
};
主线程中发送消息也无需改动:
worker.postMessage({ input: 'hello' });
worker.onmessage = ({ data }) => console.log(data);
常见问题处理
遇到报错时优先检查:
-
CORS 错误:确保模块脚本与主页面同源,或服务器正确设置了
Access-Control-Allow-Origin -
404 或 MIME 类型错误:确认服务器返回
application/javascript(不是text/plain),且路径可访问 -
“Failed to resolve module specifier”:检查是否漏写了
./,例如import './utils.js'✅,import 'utils.js'❌

















