TypeError:window.require不是一个函数

时间:2019-05-11 14:41:49

标签: javascript node.js electron

我正在尝试构建一个电子应用程序,并希望使用window.require。不幸的是,编译器说“ TypeError:window.require不是函数”。具有讽刺意味的是, require 仅在main.js中有效。

这里是我要运行的代码:

const electron = window.require('electron')
const low =  window.require('lowdb')
const FileSync = window.require('lowdb/adapters/FileSync')

我在另一篇文章中读到有人遇到了同样的问题,并将此代码添加到.html文件中即可解决此问题:

    <script type="text/javascript" src="../../../Gehaltseinstellungen_Hinzufügen.js">
        window.nodeRequire = require;
        delete window.require;
        delete window.exports;
        delete window.module;
    </script>

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

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

感谢阅读,祝您有美好的一天;)

4 个答案:

答案 0 :(得分:20)

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

    webPreferences: {
        nodeIntegration: true,
        contextIsolation: false
    }

也许有用

答案 1 :(得分:5)

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

webPreferences: {
  nodeIntegration: true,
  enableRemoteModule: true,
  contextIsolation: false,
},
<块引用>

注意:macbook m1,big sur 11.4,可能跟OS,idk有关系。

答案 2 :(得分:1)

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

首先-如果您使用Electron中的BrowserWindows 5.0,nodeIntegration is false by default,那么在创建窗口时需要明确指定它:

mainWindow = new BrowserWindow({
  width: 800,
  height: 600,
  webPreferences: {
    nodeIntegration: true
  }
})

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

const { ipcRenderer, remote } = require('electron');

答案 3 :(得分:0)

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

  webPreferences: {
    nodeIntegration: true,
    contextIsolation: false
  }

上面的配置对我有用。