我正在使用Node.js + TypeScript开发项目。
启动main. ts后,它返回:
import { parentPort } from 'worker_threads';
^^^^^^
SyntaxError: Cannot use import statement outside a module
- 主文件. ts *
import { Worker } from 'worker_threads';
const worker = new Worker('./src/Workers/worker.ts');
worker.on('message', (data) => {
console.log(data);
})
worker.postMessage('start');
- 工人. ts *
import { parentPort } from 'worker_threads';
import { broadcastService } from '../services/BroadcastService'
parentPort?.on('message', async (data: string) => {
console.log(data);
const currentBroadcasts = await broadcastService.startBroadcastsChecking();
parentPort?.postMessage(currentBroadcasts);
})
尝试:
1.将文件扩展名更改为.js
(* worker. ts-〉worker. js *)
new Worker('./src/Workers/broadcastsCheckingWorker.ts', { type: 'module' } as any)
(* 主文件. ts *)
import { parentPort } from 'worker_threads';
^^^^^^
SyntaxError: Cannot use import statement outside a module
importScripts('../services/BroadcastService')
(* 工人. js/工人. ts *)
importScripts('../services/BroadcastService')
^
ReferenceError [Error]: importScripts is not defined
1.将"type": "module"
添加到package.json
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for C:\Users\Administrator\Desktop\lives-downloader-bot\src\server.ts
1条答案
按热度按时间h6my8fg21#
使用Web Workers时,JavaScript文件在不同的上下文中执行,无法访问主线程的全局作用域。
因此,您不能在Web工作器中使用import语句,而应该使用require语句。
在主.ts文件中,应更改以下行
到
在worker.ts文件中,应更改以下行
到
另外,确保worker.ts使用tsc或其他转换器转换为javascript。
Web Workers依赖于浏览器中没有的require函数,所以如果你打算在浏览器端使用这个函数,你应该使用其他的库比如worker-loader或者webpack来加载worker。