Webpack worker-loader - 导入不起作用

Yom*_*sk8 5 web-worker ecmascript-6 webpack

我正在使用 React/Webpack/ES6 制作应用程序,但遇到了问题。

我正在尝试使用网络工作者进行 API 调用。我有一个功能线程池来启动我的网络工作者,并且没有问题。

问题是我正在使用 webpack worker-loader 来创建我的工作人员,如果我想导入这样的外部库:

import MyLibrary from './path/to/MyLibrary';
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误:

Uncaught ReferenceError: window is not defined
Run Code Online (Sandbox Code Playgroud)

我无法让它工作,但根据文档,我认为我做得对。任何的想法?

Tom*_*ica 2

好吧,您没有分享任何可能有问题的代码MyLibrary。通常,JavaScript 错误对象包含有关引发错误的行和文件的信息。

尽管如此,我还是会猜测明显的可能性:您正在使用windowin MyLibrary全局window属性没有在网络工作者中定义!对于必须与工作程序兼容的代码,请使用self. 它也可以在正常的浏览器上下文中工作 -self因此比window.

作为旁注,也不要依赖于window未在worker中定义 - 一些库定义它来处理兼容性问题。我有时也会这样做:

if(typeof window != "object")
    self.window = self;
Run Code Online (Sandbox Code Playgroud)

如果您不能或不想编辑库,这也是可以接受的解决方法。我正是这样做了,并且做了更多的事情来让 jQuery 在 Web Workers 中工作