【发布时间】:2019-02-13 15:21:17
【问题描述】:
因此,我遵循了许多指南来设置 Webpack、Electron 和 React 以制作桌面应用程序。完成设置后,我开始工作,并了解到我需要来自 main 和 renderer 的 IPC 机制才能进行通信。
import {ipcRenderer} from "electron";
将此添加到我的 renderer.js 文件会导致错误 Uncaught ReferenceError: require is not defined。
在向一些同事提出我的问题后,有人建议我在我的 main.js 文件中进行更改
webPreferences: {
nodeIntegration: false,
}
到
webPreferences: {
nodeIntegration: true,
}
我在谷歌上读到的每一个地方都非常清楚地表明,如果安全是你关心的事情,那么这不是你应该做的事情。但是,我能遇到的有关电子 ipc 的所有资源都使用了 ipcRenderer。
现在,互联网上的每个示例是否都存在巨大的安全漏洞,还是我在这里遗漏了一些关键部分?
我的问题如下。
- 是否可以在不启用 nodeIntegration 的情况下使用 ipcRenderer?
- 如果是,我该怎么做,为什么这么多资源会排除这些信息?
- 如果不是,我用什么?
如果我问错了问题,或者我遗漏了什么,或者我提出这个问题的方式有任何其他明显问题,请告诉我,否则提前致谢。
【问题讨论】:
-
nodeIntegration启用/禁用 NodeJS 的使用,由于 Electron 是一个 NodeJS 模块,没有 NodeJS 就无法使用它。所以,不,如果你想使用 Electron 的ipcRenderer,你必须启用 NodeJS。 -
我同意。将
nodeIntergation设置为false时,main和renderer进程之间根本无法通信。我真的想知道当电子设置为false时,电子在现实世界中的用途是什么,现在他们将其设为默认值。 -
@jayarjo 我不明白,因为根据电子文档
nodeIntegration默认设置为false,所以一定不需要? -
当
nodeIntegration被禁用时,你仍然可以通过其他方式与主线程通信。例如,您可以建立WebSocket 连接或标准 HTTP 方法(例如,GET/POST后台 JSON)。以下 Luke H 的答案为您的所有 3 个问题提供了详细的解释和解决方案,我建议将其标记为已接受的答案。 -
在Q&A 中,我发布了一个示例,说明如何通过预加载脚本在主进程和渲染器进程之间设置基于 IPC 的通信。希望对您有所帮助。
标签: javascript reactjs webpack electron