electron渲染进程报错:require is not defined
请各位大神解答:electron框架加载渲染进程时,渲染进程require报错,项目未引入其他框架
学习electron框架小练习相关代码
// 主进程
const {app, BrowserWindow, ipcMain} = require('electron')
app.on('ready', () => {
// 新建窗口
const win = new BrowserWindow()
// 开启开发工具
win.webContents.openDevTools()
// 窗口加载页面
win.loadFile('./layout/index.html')
})
//渲染进程
<script>
const ele = require('electron')
console.log(ele)
</script>
electron界面控制台本应该输出结果,但是控制台报错,Uncaught ReferenceError: require is not defined
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
终于把问题解决了,但是仍然有疑惑,希望跟各位分享一下,也希望能得到大神的进一步解答。
先说一下,因为是学习的练习项目,文件很简单,就只有一个主进程和一个渲染进程。
主进程代码如下:
渲染进程代码如下:
在原代码基础上,就增加了一句,将支持完整node改为true,即:
代码即可正常运行,require不再报错,但是问题是,之前查了好多资料,都是提到因为要避免框架与node.js的冲突,都是建议用electron的时候将nodeIntegration禁止,而且查看文档的时候,文档提到nodeIntegration是默认为true的。
以上仍然存在的两个问题,希望等得到进一步解答,谢谢!
你得看看是否重命名了
require
如果你项目中使用了jQuery/RequireJS/Meteor/AngularJS
等框架,如果使用了,就必须先禁用node特性或者在页面加载上面那些框架之前给require
重命名并且删除delete window.require;delete window.exports;delete window.module;
具体解决办法如下:
或者:
之后在使用
require
的地方需要使用nodeRequire
替代参考 FAQ - I can not use jQuery/RequireJS/Meteor/AngularJS in Electron
你这里可以这么就修改
我的发现:
貌似需要同时配置:
1,创建renderer.js文件
global.electron = require('electron');
2,修改main.js文件
修改创建浏览器的入口代码,添加preload配置项。将renderer.js作为预加载文件
win = new BrowserWindow({
3,在React组件中如下使用electron
const electron = window.electron;
因为要使用进程通讯,所以可以在渲染进程中直接这么写:
const ipcRenderer = window.electron.ipcRenderer;
在此时,就没有那个TypeError: fs.existsSync is not a function 的报错了。
方案2:
1,修改index.html:
<script>
</script>
<div id="root"></div>
2,main.js:
win = new BrowserWindow({
3,渲染进程这么写:
getName = (e) =>{
试了一个最简单的方法:
渲染进程直接可以这么写, <script>
就不会报错了,主进程监听就可以了,就不报错了
修改 main.js 中 配置
https://stackoverflow.com/que...
nodeIntegration: true is a security risk only when you're executing some untrusted remote code on your application. For example, suppose your application opens up a third party webpage. That would be a security risk because the third party webpage will have access to node runtime and can run some malicious code on your user's filesystem. In that case it makes sense to set nodeIntegration: false. If your app is not displaying any remote content, or is displaying only trusted content, then setting nodeIntegration: true is okay.
另外,可参考下面文档:
https://electronjs.org/docs/t...