import path from 'path'; import { Worker as NodeWorker } from 'worker_threads'; export class UniversalWorker { private worker: NodeWorker | Worker; constructor(workerPath: string | URL) { if (typeof window !== 'undefined' && 'Worker' in window) { // 浏览器环境 this.worker = new Worker(workerPath); } else { // Node.js 环境 // const resolvedPath = require.resolve(workerPath); this.worker = new NodeWorker(workerPath, { eval: false }); } } postMessage(message: any): void { this.worker.postMessage(message); } onMessage(callback: (data: any) => void): void { if ('onmessage' in this.worker) { this.worker.onmessage = (event) => callback(event.data); } else { this.worker.on('message', callback); } } onError(callback: (err: Error) => void): void { if ('onerror' in this.worker) { this.worker.onerror = (event) => callback(new Error(event.message)); } else { this.worker.on('error', callback); } } terminate(): void { this.worker.terminate(); } getWorker(){ return this.worker } }