使用 React 中的全局变量,这些变量在运行时提供,因此在构建时未知

IT技术 javascript reactjs webpack
2021-05-05 05:21:56

我正在为 Overwolf 开发一个应用程序http://developers.overwolf.com/documentation/sdk/overwolf/

该平台的应用程序是在 Overwolf 浏览器中执行的 html/js 应用程序。浏览器通过全局变量公开 Overwolf API,overwolf因此例如对 API 的调用如下所示:

overwolf.windows.getCurrentWindow(function callback(res) {
    var id = res.window.id;
    overwolf.windows.close(id, function callback() {
        logger.warning("Closing App!");
    });
});

(请注意,没有导入任何脚本,API 由浏览器公开)我目前正在尝试将我的普通 JS 应用程序迁移到 React,但他们的 API 公开方式面临一些问题。因为我没有导入任何类型的脚本,所以 React 不知道该全局变量,并且无法编译并显示错误:

Line 6: 'overwolf' is not defined no-undef

我试图解决这个问题:

const overwolf = typeof overwolf === 'undefined' ? null : overwolf;

在这种情况下,overwolf 将始终被覆盖为 null。如果我像这样尝试

const overwolfGlobal = typeof overwolf === 'undefined' ? null : overwolf;

react编译器会typeof overwolf再次抱怨

所以我的通用问题是:如何使用在运行时提供的全局变量,因此 React(和 Webpack)不知道这些变量

1个回答

您需要externals在 webpack 配置对象上提供配置选项。下面讲述的WebPackoverwolf图书馆应该作为一个全局变量:

externals: {
  overwolf: {
    root: 'overwolf'
  }
}

阅读更多关于Webpack externals 的信息

防止捆绑某些imported 包,而是在运行时检索这些外部依赖项