当我尝试使用网络工作者时,我遇到了正确编译我的打字稿的问题。
我有一个像这样定义的工人:
onmessage = (event:MessageEvent) => {
var files:FileList = event.data;
for (var i = 0; i < files.length; i++) {
postMessage(files[i]);
}
};
在我的应用程序的另一部分中,我使用webpack worker loader来加载我的工作人员:let Worker = require('worker!../../../workers/uploader/main');
{
"compilerOptions": {
"lib": [
"webworker",
"es6",
"dom"
]
}
}
现在,当我运行webpack让它构建所有内容时,我会遇到一堆错误:C:/Users/hanse/Documents/Frontend/node_modules/typescript/lib/lib.webworker.d.ts:1195:13
Subsequent variable declarations must have the same type. Variable 'navigator' must be of type 'Navigator', but here has type 'WorkerNavigator'.
所以我的问题是:如何指定webworker使用lib.webworker.d.ts定义,其他一切都遵循正常的定义?
答案 0 :(得分:16)
在tsconfig.json
文件的compilerOptions
中设置此项:
{
"compilerOptions": {
"target": "es5",
//this config for target "es5"
"lib": ["webworker", "es5", "scripthost"]
//uncomment this for target "es6"
//"lib": ["webworker", "es6", "scripthost"]
}
}
网络工作者无法访问DOM,window
,document
和parent
个对象(此处支持完整列表的对象:Functions and classes available to Web Workers); TypeScript的dom
库不兼容,并重新定义了lib.webworker.d.ts
答案 1 :(得分:2)
worker-loader
中测试了该版本,并且能够轻松地添加一个简单的模块,而不是worker.ts
和entry.ts
都可以导入的模块。
答案 2 :(得分:0)
自从我迁移到file-loader": "5.0.2"
,
我遇到了这个问题:工作文件正在重播
Uncaught SyntaxError: Unexpected token '<'
,网址为/[object%20Module]
。
要解决该问题,请用
替换main.ts
中的workerPath
import workerPath from "file-loader?name=[name].js!./search.worker";