当在同一文件中定义并使用webpack时,使用blob创建的JavaScript Web Workers将中断
我目前使用的Web Worker是从如下Blob创建的:当在同一文件中定义并使用webpack时,使用blob创建的JavaScript Web Workers将中断,javascript,google-chrome,webpack,web-worker,Javascript,Google Chrome,Webpack,Web Worker,我目前使用的Web Worker是从如下Blob创建的: worker = new Worker(URL.createObjectURL(new Blob(["(" + worker_function + ")()"], { type: "text/javascript" }))); function worker_function() { self.importScripts("https://www.li
worker = new Worker(URL.createObjectURL(new Blob(["(" + worker_function + ")()"], {
type: "text/javascript"
})));
function worker_function() {
self.importScripts("https://www.lib1.js", "https://www.lib2.js");
// ... other stuff
const x = new lib1Obj.doStuff()
其中,worker\u函数
只是同一文件中的一个函数,其中包含工作人员应该执行的代码。在这个worker\u函数中,我需要依赖外部库。这些库当前正在通过importScripts
加载,如下所示:
worker = new Worker(URL.createObjectURL(new Blob(["(" + worker_function + ")()"], {
type: "text/javascript"
})));
function worker_function() {
self.importScripts("https://www.lib1.js", "https://www.lib2.js");
// ... other stuff
const x = new lib1Obj.doStuff()
到目前为止,这一切都很好。
此外,我还通过var lib1Obj=require(“lib1”)
在主脚本中的worker外部使用lib1
。然而,我现在在项目中使用webpack,这当然会最小化代码并重命名变量。一般来说,我确实想要这种行为,但这也会导致lib1Obj
变量被重命名为renamedLib1Obj
——在worker函数外部和内部。现在在浏览器中执行worker时,renamedLib1Obj
不再定义,因为命名与lib1
中预期的命名不一致,并且脚本中断
主要的问题是,创建的HTML文件也将在本地使用,并从文件系统打开,这迫使我在同一个JS文件中使用整个Blob
解决方案定义worker,因为由于安全原因,否则worker无法在Google Chrome中执行。因此,在worker函数中使用worker loader
来使用import
或require
而不是importScripts
这样一种常见的解决方案对我来说不起作用,因为这会创建一个单独的构建文件,Chrome不允许这样做(或者至少我还没有找到一种方法让它对我起作用)
有没有办法解决这个问题?如果可能的话,我想尽量减少网页对我脚本的影响,但除此之外,我对任何事情都持开放态度。唯一的限制是,生成的工作人员必须从文件系统在Google Chrome中工作,而无需定义任何启动参数等
如果它是相关的,我指的lib1
是dagreD3
。重命名只是为了泛化