我正在尝试在网络工作者中的打字稿中使用外部模块,并且遇到了问题。测试示例的所有代码都在www.windward.net/temp/WebWorkerRequireJs.zip(下面列出的关键代码)中。
我想要的打字稿(在主线程中可以正常工作的是:
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
然后,我将“定义”切换为“需要”,并且可以正常工作:
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
这就引出了一个问题-我如何获取打字稿以生成此脚本以便其运行。解决方案是建立一个主要的javascript文件,该文件是最初的Web Worker应用程序,然后调用Typescript部分吗?如果是这样,我该如何设置?
还是以某种方式告诉打字稿编译器从定义更改为要求并插入importScripts()的解决方案?
更新:看来(最佳?)解决方案是主要的Web工作程序文件是javascript文件。它具有importScripts()和主打字稿类的要求。您创建该类,然后从那里运行。到那时,打字稿“ import”引起“定义”所有作品。迄今为止...
工作文件不会由AMD加载程序加载,而将由浏览器加载。因此,您需要突破AMD代码生成的范围,并自己使用原始的“ require”调用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句