将函数传递给使用导入的 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,至少现在是这样。
我想将一个简单的函数传递给 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,至少现在是这样。