Requirejs typescript如何在web worker中导入外部模块

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

我试图在web worker中使用typescript中的外部模块,但遇到了问题。测试示例的所有代码都位于(下面列出的关键代码)

我想要的类型脚本(在主线程中工作良好)是:

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