You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron IPC通信报错求助:Uncaught ReferenceError: require未定义

解决Electron中require is not defined错误并实现Exit按钮IPC通信

错误原因

从Electron 12版本开始,nodeIntegration默认被禁用,且即使手动设置为true,在更高版本中还需要关闭contextIsolation才能生效——但这种做法会带来严重安全风险,渲染进程会直接拥有Node.js完整权限,Electron官方早已不推荐该配置。你的代码中虽设置了nodeIntegration: true,但可能因Electron版本过高,或未关闭默认开启的contextIsolation,导致require无法在渲染进程中使用。

正确解决方案(官方推荐的预加载脚本方案)

通过预加载脚本安全暴露IPC通信所需API,无需开启危险的Node.js集成,步骤如下:

1. 创建preload.js文件

在项目根目录新建preload.js,内容如下:

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

// 安全暴露ipcRenderer的send方法到渲染进程全局对象
contextBridge.exposeInMainWorld('electronAPI', {
  exitApp: () => ipcRenderer.send('exit')
});

2. 修改main.js的窗口配置

更新BrowserWindow的webPreferences部分,指定预加载脚本路径,同时移除不安全的nodeIntegration配置:

const electron = require('electron');
const { app, BrowserWindow, ipcMain } = electron;
const path = require('path'); // 补充引入path模块,否则path.join会报错

const createWindow = () => {
    const mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            // 配置预加载脚本路径,__dirname指向当前文件所在目录
            preload: path.join(__dirname, 'preload.js')
            // 保持默认的contextIsolation开启状态,确保安全
        },
    });
    
    mainWindow.loadFile(path.join(__dirname, 'index.html'));
    mainWindow.webContents.openDevTools();
};

// 保留原IPC监听逻辑
ipcMain.on("exit", (evt, arg) => {
    app.quit();
});

// 补充app的生命周期监听(原代码省略的必要部分)
app.whenReady().then(() => {
    createWindow();

    app.on('activate', () => {
        if (BrowserWindow.getAllWindows().length === 0) createWindow();
    });
});

app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') app.quit();
});

3. 修改index.js,使用暴露的全局API

不再使用require,直接调用预加载脚本暴露的全局API:

document.getElementById("exit").addEventListener("click", function(e) {
    window.electronAPI.exitApp();
});

4. 验证效果

运行Electron应用后,点击Exit按钮即可正常关闭应用,且不会再出现require is not defined错误。

内容的提问来源于stack exchange,提问作者BeanBoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:20:55