【问题标题】:Webpack worker-loader - import doesn't workWebpack worker-loader - 导入不起作用
【发布时间】:2019-10-12 17:30:28
【问题描述】:

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

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

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

import MyLibrary from './path/to/MyLibrary';

我收到这样的错误:

Uncaught ReferenceError: window is not defined

我不能让它工作,但根据documentation,我认为我做得对。有什么想法吗?

【问题讨论】:

    标签: ecmascript-6 webpack web-worker


    【解决方案1】:

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

    尽管如此,我会猜测一下明显的可能性:您在MyLibrary 中使用windowwindow 全局属性未在 web worker 中定义!对于必须与 worker 兼容的代码,请使用 self。它也可以在普通浏览器上下文中工作 - 因此selfwindow 更可取。

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

    if(typeof window != "object")
        self.window = self;
    

    如果您不能或不想编辑库,这也是可以接受的解决方法。我对make jQuery work in web workers 做了很多事情。

    【讨论】:

    • 感谢您的回复。我知道我的问题是网络工作者中没有定义窗口。问题是当我导入例如“请求”模块时会出现此错误。那么,我该如何摆脱这个问题呢?
    【解决方案2】:

    当我在 webpack 上启用热模块替换时,我遇到了同样的错误。

    1. 禁用热模块更换
    2. 在配置中添加output.globalObject: 'this'(更多详情请查看#6642

    希望这些对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2018-08-15
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 2018-08-16
      • 2018-10-17
      • 2020-07-24
      • 2019-02-04
      相关资源
      最近更新 更多