const work = new Worker(new URL('@/worker/message.js', import.meta.url));
work.postMessage(40)
work.onmessage = function (e) {
console.log(e.data);
};
不能使用import吗?

const work = new Worker(new URL('@/worker/message.js', import.meta.url));
work.postMessage(40)
work.onmessage = function (e) {
console.log(e.data);
};
不能使用import吗?

关注让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。
如果答案让您满意,请采纳、点赞、关注,非常感谢!
.
每日一句正能量,让它带给您好心情:生活或许不完美,但总有值得努力的地方。
.
在 Vue3 中使用 Web Worker 时遇到 import 语句报错,是因为 Web Worker 默认运行在非模块化环境中,无法直接使用 ES6 模块的 import 语法。
从错误信息 Uncaught SyntaxError: Cannot use import statement outside a module 可以看出,浏览器试图在非模块环境中执行 import 语句。
importScripts()(适用于简单场景)// message.js
importScripts('./business-list.js'); // 导入其他脚本
console.log(businessList);
self.addEventListener('message', (e) => {
console.log('Worker received:', e.data);
setInterval(() => {
const data = {
content: 'Worker message',
timestamp: new Date().toISOString()
};
self.postMessage(data);
}, 1500);
});
修改 Worker 创建方式,添加 type: 'module' 选项:
const worker = new Worker(new URL('@/worker/message.js', import.meta.url), {
type: 'module'
});
worker.postMessage(40);
worker.onmessage = function (e) {
console.log(e.data);
};
同时确保你的 message.js 使用标准的 ES6 模块语法:
// message.js
import { businessList } from './business-list.js';
console.log(businessList);
self.addEventListener('message', (e) => {
console.log('Worker received:', e.data);
setInterval(() => {
const data = {
content: 'Worker message',
timestamp: new Date().toISOString()
};
self.postMessage(data);
}, 1500);
});
如果你使用 Vue CLI 或 Vite,它们通常有内置的 Worker 处理:
Vite 配置示例:
// vite.config.js
export default {
worker: {
format: 'es' // 确保 Worker 作为 ES 模块处理
}
}
// business-list.js
export const businessList = ['item1', 'item2', 'item3'];
// message.js
import { businessList } from './business-list.js';
console.log('Business list:', businessList);
self.addEventListener('message', (e) => {
console.log('Received:', e.data);
setInterval(() => {
self.postMessage({
content: 'Data from worker',
timestamp: Date.now()
});
}, 1000);
});
// Vue 组件中使用
const worker = new Worker(new URL('@/worker/message.js', import.meta.url), {
type: 'module'
});
worker.postMessage('start');
worker.onmessage = (e) => {
console.log('Main received:', e.data);
};
选择方案二(模块化 Worker)是最推荐的解决方案,因为它保持了代码的模块化结构且符合现代 JavaScript 开发标准。