我试图建立一个电子应用程序,并希望使用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。
7条答案
按热度按时间mum43rcc1#
您可以将webPreferences.contextIsolation设置为false,如下所示
它也许有用
2j4z5cfb2#
不清楚您使用的
Electron
版本。您使用的语法不标准。首先,如果您使用的是
Electron
5.0,nodeIntegration在BrowserWindows
中默认为false,因此您需要在创建窗口时显式指定它:鉴于上述情况,下面的语法可以正常工作(即不需要“window”引用):
cbeh67ev3#
需要所有3个设置这样做,使这一工作:
注意:macbook m1,大冲浪11.4,也许它必须做一些关于操作系统,idk。
P.S.正如评论中提到的,在使用
nodeIntegration
之前,请检查电子文档,以了解何时可能存在安全问题:隔离不受信任的内容每当您从不受信任的来源接收代码时,就会存在安全问题(例如远程服务器)并在本地执行。例如,假设远程网站显示在默认的BrowserWindow中。如果攻击者设法更改了上述内容,(通过直接攻击源代码,或通过位于您的应用和实际目标之间),他们将能够在用户的计算机上执行本机代码。
在️任何情况下都不应该在启用Node.js集成的情况下加载和执行远程代码。相反,只使用本地文件(与应用程序打包在一起)来执行Node.js代码。要显示远程内容,请使用标记或BrowserView,确保禁用nodeIntegration并启用contextIsolation。
来源:https://www.electronjs.org/docs/latest/tutorial/security#isolation-for-untrusted-content
sq1bmfud4#
我在《电子+Angular 》中也遇到过这个问题。
以上配置适合我。
slsn1g295#
电子+React+ typescript 中也有同样的问题。这为我解决了
nfs0ujit6#
我被这个问题困了几天。我一辈子都想不出这个问题。看了很多文档和stackoverflow,最后!!!
我通过以下方法修复了此错误:
创建文件preload.js:
然后在main.js/electron.js中:
最后是App.js:
我在windows中从electronic得到了ipcRenderer。我敢肯定你可以得到你想要的任何其他东西。
i34xakig7#
您不需要像建议的那样修改Web首选项,我建议您不要这样做,除非您有更好的理由,因为隐含的安全问题(https://www.electronjs.org/docs/latest/tutorial/security#isolation-for-untrusted-content)。
相反,你可以使用预加载脚本来添加你需要的任何功能到
window
。preload.js(位于根文件夹中):
main.js中的Web首选项:
现在,您可以在代码中引用它:
参考文档:https://www.electronjs.org/docs/latest/tutorial/tutorial-preload#communicating-between-processes