TypeError:window.require不是一个函数

Man*_*ds3 7 javascript node.js electron

我试图建立一个电子应用程序,并想使用window.require。不幸的是,编译器说“ TypeError:window.require不是函数”。具有讽刺意味的是,在main.js中需要工作。

这是我试图运行的代码:

const electron = window.require('electron')
const low =  window.require('lowdb')
const FileSync = window.require('lowdb/adapters/FileSync')
Run Code Online (Sandbox Code Playgroud)

我在另一篇文章中读到有人遇到了同样的问题,并且通过将以下代码添加到.html文件中来解决了该问题:

    <script type="text/javascript" src="../../../Gehaltseinstellungen_Hinzufügen.js">
        window.nodeRequire = require;
        delete window.require;
        delete window.exports;
        delete window.module;
    </script>
Run Code Online (Sandbox Code Playgroud)

作者还说,使用“ nodeRequire”而不是require可以解决问题,但是并不能...

我读到的另一个选项是,在激活渲染过程时,NodeIntegration设置为false,但是我不知道如何在渲染时激活Node。

小智 26

您可以像这样将webPreferences.contextIsolation设置为false

    webPreferences: {
        nodeIntegration: true,
        contextIsolation: false
    }
Run Code Online (Sandbox Code Playgroud)

它可能有效


No *_*ing 23

目前尚不清楚Electron您使用的是哪个版本。您使用的语法是非标准的。

首先-如果您使用的是Electron5.0,则默认情况下nodeIntegration为falseBrowserWindows因此在创建窗口时需要显式指定它:

mainWindow = new BrowserWindow({
  width: 800,
  height: 600,
  webPreferences: {
    nodeIntegration: true
  }
})
Run Code Online (Sandbox Code Playgroud)

鉴于以上所述,以下语法可以正常工作(即,无需“窗口”引用):

const { ipcRenderer, remote } = require('electron');
Run Code Online (Sandbox Code Playgroud)

  • 赞成,因为`webPreferences`对象帮助我摆脱了错误,但是我仍然需要在`window`前面加上前缀 (2认同)
  • @BlueBot确实,'require('electron')'不起作用,但是`window.require('electron')`很好 (2认同)
  • 使用“window.require('电子')”可以解决上述问题,但简单的“require(电子)”会导致另一个问题 (2认同)

小智 7

我在 Electron + Angular 中也遇到了这个问题。

  webPreferences: {
    nodeIntegration: true,
    contextIsolation: false
  }
Run Code Online (Sandbox Code Playgroud)

上面的配置对我有用。


Luk*_*kas 6

需要像这样的所有 3 个设置才能完成这项工作:

webPreferences: {
  nodeIntegration: true,
  enableRemoteModule: true,
  contextIsolation: false,
},
Run Code Online (Sandbox Code Playgroud)

注意:macbook m1,big sur 11.4,也许它必须对操作系统,idk 做些什么。

  • 我知道他们说不要发表评论来表示感谢,但我刚刚花了 4 个小时研究如何解决这个问题,这就是解决方案!谢谢你! (2认同)

小智 5

Electron + React + Typescript 中存在同样的问题。这为我解决了这个问题

webPreferences: {
    nodeIntegration: true,
    enableRemoteModule: true,
    contextIsolation: false
}
Run Code Online (Sandbox Code Playgroud)