将函数传递给使用导入的 webpack 的 web worker class

Pass a function to a web worker that uses a webpack imported class

我想将一个简单的函数传递给 web worker,而不是直接在 web worker 中编写。我知道这不是直接可能的,但是在许多情况下,您可以 "work around" 通过在您的函数上调用 toString() 并在该字符串上调用 eval ,一旦它在 worker 中。

我没有在别处看到的注意事项是此函数使用从另一个模块导入的 class。 (我正在使用 webpack。)

取这个函数:() => new MyClass();

对其调用 toString() 得到:

() => {
  return new _MyClass__WEBPACK_IMPORTED_MODULE_5__["MyClass"]();
}

这是有道理的,因为 MyClass 是从另一个模块导入的。问题是在工作人员中对此调用 eval 会出现错误:

ReferenceError: _MyClass__WEBPACK_IMPORTED_MODULE_5__ is not defined

同样,这是有道理的,因为 class 没有导入到 worker 的模块中。但是有什么办法可以解决这个问题吗?函数引用的 class 在编写 worker 时是未知的。

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

new Worker(URL.createObjectURL(new Blob([functionString])));

我已经尝试在传递给工作人员的函数中使用动态导入,但这仍然失败,因为工作人员似乎不希望进行动态导入:

() => {
  return import ('./MyClass')
    .then(module => new module.MyClass());
}

ReferenceError: __webpack_require__ is not defined

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

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

我将为每个 class 我想要实例化的对象使用不同的 worker,至少现在是这样。