将函数传递给使用webpack导入类的Web Worker

FTW*_*ton 8 javascript import module web-worker webpack

我想将一个简单的函数传递给Web Worker,而不是直接在Web Worker中编写它。我知道这不可能直接实现,但是在很多情况下,您可以通过调用toString()函数并eval在工作线程中调用该字符串来“解决”此问题。

我在其他地方没有看到的警告是,此函数使用从另一个模块导入的类。(我正在使用webpack。)

使用此功能: () => new MyClass();

调用toString()它可以得到:

() => {
  return new _MyClass__WEBPACK_IMPORTED_MODULE_5__["MyClass"]();
}
Run Code Online (Sandbox Code Playgroud)

这是有道理的,就像MyClass从另一个模块导入的一样。问题是eval在工作程序中对此进行调用会产生错误:

ReferenceError:_MyClass__WEBPACK_IMPORTED_MODULE_5__未定义

同样,这是有道理的,因为该类未导入到工作程序的模块中。但是有什么办法可以解决这个问题?在编写工作者时,该函数引用的类将不知道。

毫不奇怪,无论是使用worker-loader还是使用以下对象URL创建worker,我都会得到以下结果:

new Worker(URL.createObjectURL(new Blob([functionString])));
Run Code Online (Sandbox Code Playgroud)

我尝试在传递给工作程序的函数中使用动态导入,但是由于似乎工作程序不希望执行动态导入,因此此操作仍然失败:

() => {
  return import ('./MyClass')
    .then(module => new module.MyClass());
}
Run Code Online (Sandbox Code Playgroud)

ReferenceError:__webpack_require__未定义

有什么聪明的方法可以解决此问题,还是我应该放弃并希望为我要实例化的每个类编写一个不同的工作程序?

FTW*_*ton 0

我得出的结论是,这不能以稳健且非黑客的方式完成,尽管我很高兴仍然被证明是错误的。

我将为每个要实例化的类使用不同的工作人员,至少现在是这样。