在电子的渲染器进程中使用 npm 模块

Posted

技术标签:

【中文标题】在电子的渲染器进程中使用 npm 模块【英文标题】:using npm module in renderer process of electron 【发布时间】:2021-07-20 12:00:12 【问题描述】:

我已经在我的机器上通过npm install Buffer 安装了 Buffer 模块,我想简单地将它导入渲染器进程以使用 Buffer

当我使用这个时:

const Buffer = require('Buffer')

它说 require 是未定义的。

Stack Overflow 上的解决方案都不起作用。

【问题讨论】:

改用导入,看看这个***.com/questions/31931614/… 您可能只需要设置nodeIntetration: true。请参阅This explanation 和/或this Stack Oveflow question 【参考方案1】:

确保您将BrowserWindow 设置中的nodeIntegration 设置为true,并将contextIsolation 设置为false,如下所示:

new BrowserWindow(
    webPreferences:  
        nodeIntegration:  true,
        contextIsolation: false
    ,
);

默认情况下,nodeIntegrationfalse,这会阻止您在渲染器进程中使用 NPM 模块,打开 nodeIntegration 将解决此问题。

Read more here

注意:要从 Renderer 进程访问 Node.js API,您需要将 nodeIntegration 首选项设置为 true,并将 contextIsolation 首选项设置为 false。

免责声明,打开 nodeIntegration 会在您的应用中打开安全漏洞。 See Zac's answer 了解如何修复它们。

【讨论】:

此答案在您的应用中打开 security vulnerabilities。 @Zac 非常正确,您对这些安全漏洞的解释非常全面,我很感激。

以上是关于在电子的渲染器进程中使用 npm 模块的主要内容,如果未能解决你的问题,请参考以下文章

如何在将 React 与电子结合使用时分离渲染器和主进程依赖关系?

如何从电子中的渲染器进程调用 preload.js 中定义的函数

无法通过电子中的渲染器进程发送消息

由于 contextIsolation 发生变化,在电子渲染器进程中向 Web 应用程序发送命令

安全访问渲染器进程中基于节点的模块

如果渲染器进程关闭,则会收集电子全局变量垃圾?