Requirejs typescript如何在web worker中导入外部模块
我试图在web worker中使用typescript中的外部模块,但遇到了问题。测试示例的所有代码都位于(下面列出的关键代码) 我想要的类型脚本(在主线程中工作良好)是:Requirejs typescript如何在web worker中导入外部模块,requirejs,typescript,web-worker,Requirejs,Typescript,Web Worker,我试图在web worker中使用typescript中的外部模块,但遇到了问题。测试示例的所有代码都位于(下面列出的关键代码) 我想要的类型脚本(在主线程中工作良好)是: import myClass = require('my-class'); class WorkerThread { } self.onmessage = function (e) { console.log("client received message = " + e.data); var mc = n
import myClass = require('my-class');
class WorkerThread {
}
self.onmessage = function (e) {
console.log("client received message = " + e.data);
var mc = new myClass.MyClass();
console.log("worker thread toUpper = " + mc.toUpper("dave"));
self.postMessage("from client");
}
这将生成以下javascript,但由于未定义define而失败:
define(["require", "exports", 'my-class'], function(require, exports, __myClass__) {
var myClass = __myClass__;
var WorkerThread = (function () {
function WorkerThread() {
}
return WorkerThread;
})();
self.onmessage = function (e) {
console.log("client received message = " + e.data);
var mc = new myClass.MyClass();
console.log("worker thread toUpper = " + mc.toUpper("dave"));
self.postMessage("from client");
};
});
//# sourceMappingURL=worker-thread.js.map
因此,第1步,我添加了importScripts并将此.js文件命名为:
importScripts('../../scripts/require.js');
define(["require", "exports", 'my-class'], function(require, exports, __myClass__) {
var myClass = __myClass__;
var WorkerThread = (function () {
function WorkerThread() {
}
return WorkerThread;
})();
self.onmessage = function (e) {
console.log("client received message = " + e.data);
var mc = new myClass.MyClass();
console.log("worker thread toUpper = " + mc.toUpper("dave"));
self.postMessage("from client");
};
});
//# sourceMappingURL=worker-thread.js.map
这不起作用,并导致错误:
Uncaught Error: Mismatched anonymous define() module: function (require, exports, __myClass__) {
var myClass = __myClass__;
var WorkerThread = (function () {
function WorkerThread() {
}
return WorkerThread;
})();
self.onmessage =...<omitted>...ch
这就引出了一个问题——如何让typescript生成它,使其运行。解决方案是设置一个主javascript文件,即最初的web worker应用程序,然后调用typescript部分吗?如果是,我该如何设置
或者,解决方案是告诉typescript编译器从define更改为require并插入importScripts()
更新:看起来一个(最好的)解决方案是,主web worker文件是一个javascript文件。它具有importScripts()和主typescript类的要求。您创建该类并从那里运行。此时,typescript“import”即“define”所有工作。到目前为止…工作文件不会由AMD加载程序加载,而是由浏览器加载。因此,您需要中断AMD代码生成并使用原始“require”调用您自己。这是否意味着我不能在web worker中使用import语句?如果是,这是一个巨大的问题。或者我可以将主文件设置为.js文件,在其中配置requireJS(如何?)然后我可以做导入?谢谢-daveyou可以使用导入,请看:
可选模块加载和其他高级加载场景:这里:但您仍然需要原始的require callHi;我仍然停留在这里。我创建了一个示例项目来展示这方面的基本知识,并找到了哪些可行和不可行。但我不知道如何使用typescript不需要手动编辑它创建的每个.js文件。有办法吗?谢谢-dave
importScripts('../../scripts/require.js');
require(["require", "exports", 'my-class'], function(require, exports, __myClass__) {
debugger;
var myClass = __myClass__;
var WorkerThread = (function () {
function WorkerThread() {
}
return WorkerThread;
})();
self.onmessage = function (e) {
console.log("client received message = " + e.data);
var mc = new myClass.MyClass();
console.log("worker thread toUpper = " + mc.toUpper("dave"));
self.postMessage("from client");
};
});
//# sourceMappingURL=worker-thread.js.map