Electron - 尽管 nodeIntegration 为真,但未定义要求

Posted

技术标签:

【中文标题】Electron - 尽管 nodeIntegration 为真,但未定义要求【英文标题】:Electron - require is not defined, despite nodeIntegration being true 【发布时间】:2021-05-08 02:52:17 【问题描述】:

我的问题是 - 我有一个 main.js 文件和一个 functions.js 文件,我希望我的一些函数在其中。但是,每当我在该 functions.js 文件中使用 require 时,都会出现错误,require is not defined。

我读过关于其他人有类似问题的帖子,但在他们的情况下,将 nodeIntegration 设置为 true 会有所帮助。这就是我从一开始就拥有的。我知道这个解决方案的问题,但目前我不需要应用程序是安全的,所以如果它有效,我会接受这个解决方案。没有。

我尝试过预加载,但我认为它只是 nodeIntegration 解决方案的“更安全”等价物。作为一个等价物,它也不起作用。你能帮帮我吗?

我的代码:

ma​​in.js

const  app, BrowserWindow, ipcMain  = require('electron')

function createWindow () 
  const win = new BrowserWindow(
    width: 800,
    height: 600,
    webPreferences: 
      nodeIntegration: true,
      contextIsolation: true,
      preload: 'functions.js'
    
  )
  win.maximize();
  win.loadFile('index.html');


app.on('ready', function() 
  createWindow();
  createOpenDialog();
);

functions.js(从字面上看,这就是代码失败所需要的全部)

const electron = require('electron');

index.html

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="main.css">
    <meta charset="UTF-8">
    <title>Hello World!</title>
    <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body style="background: white;">
    <script src="functions.js">
    </script>
</body>
</html>

【问题讨论】:

【参考方案1】:

所以,我没有尝试的一件事是将 contextIsolation 设置为 false。至少看起来是这样,因为我确定我试过了。无论如何,这似乎解决了这个问题,尽管我需要了解它究竟做了什么。我现在可以执行“require”,并且已经使用 ipcRenderer 测试了它是否有效。

【讨论】:

【参考方案2】:

上下文隔离是 Electron 上的一项安全功能。它的全部目的是将预加载脚本和 Electrons 内部 api 从您的网站中分离出来,因此它没有任何不应有的访问权限。

默认情况下,从 Electron 12 开始,上下文隔离是关闭的。这意味着如果您需要在预加载脚本中公开某些功能,则必须使用上下文桥

文档中的一个例子是这样的:

上下文隔离关闭之前

window.myAPI = 
  doAThing: () => 

之后:上下文隔离开启

const  contextBridge  = require('electron')

contextBridge.exposeInMainWorld('myAPI', 
  doAThing: () => 
)

您可以在文档中阅读有关此功能的更多信息: https://www.electronjs.org/docs/tutorial/context-isolation

【讨论】:

感谢您指出这一点!我一定会检查的。

以上是关于Electron - 尽管 nodeIntegration 为真,但未定义要求的主要内容,如果未能解决你的问题,请参考以下文章

electron框架优缺点

Electron - 解决渲染器进程中的电子模块问题

electron electron-builder 构建

为 windows 创建应用安装程序 - Electron (electron-packager, electron-builder)

用electron将Vue项目打包为window和Mac桌面应用 (electron-packager与electron-build)

03、electron-builder打包命令报错