将函数传递给使用webpack导入类的网络工作者

问题描述 投票:8回答:1

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

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

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

在其上调用toString()会给出此:

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

这很有意义,因为MyClass是从另一个模块导入的。问题是在工作程序中对此调用eval会产生错误:

ReferenceError:_MyClass__WEBPACK_IMPORTED_MODULE_5__未定义

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

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

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

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

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

ReferenceError:__webpack_require__未定义

是否有任何聪明的方法来解决此问题,或者我应该放弃并期望为我要实例化的每个类写一个不同的工作者?

javascript webpack import module web-worker
1个回答
0
投票

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

至少到现在,我要为要实例化的每个类使用不同的工作程序。

© www.soinside.com 2019 - 2024. All rights reserved.