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

Electron渲染进程vm模块弃用警告原因排查求助

问题背景

基于electron-vite-vue搭建Electron桌面应用,使用ipcRenderer与ipcMain进行进程通信,但持续收到如下警告:

The vm module of Node.js is deprecated in the renderer process and will be removed

并未直接使用vm模块,当前版本信息:

"electron": "^23.1.2",
"electron-builder": "^23.6.0"

主进程核心配置片段:

// 主窗口配置
win = new BrowserWindow({
  webPreferences: {
    preload: join(__dirname, '../preload/index.js'),
    nodeIntegration: true,
    contextIsolation: true,
    devTools: true,
  },
});

// 子窗口配置(open-win处理器中)
const childWindow = new BrowserWindow({
  webPreferences: {
    preload,
    nodeIntegration: true,
    contextIsolation: false,
  },
});

渲染进程IPC调用代码片段:

export const loginApi = {
  sendChallenge: async (email: string) => {
    return await ipcRenderer.invoke(loginChannels.sendChallenge, {email});
  },
  // ...其他API
};
警告触发原因

这个警告的核心原因是你在部分渲染窗口中启用了nodeIntegration: true并关闭了contextIsolation,即使你没有直接调用vm模块,Electron的内部逻辑也会自动依赖vm模块来处理渲染进程中的Node.js环境沙箱化,而从Electron 20+版本开始,这种在渲染进程中使用vm模块的方式已被标记为弃用。

具体细节:

  • 主窗口配置中,你同时设置了contextIsolation: true和nodeIntegration: true——但Electron在启用contextIsolation时会强制禁用nodeIntegration,所以这部分配置实际无效,不会触发警告。
  • 但在open-winIPC处理的子窗口中,你设置了contextIsolation: false且nodeIntegration: true,这会让该渲染进程拥有完整的Node.js环境权限。Electron为了在渲染进程中隔离Node环境,内部会使用vm模块实现沙箱机制,这就是警告的直接来源。
  • 另外,你的渲染进程代码直接调用ipcRenderer.invoke,说明你在渲染进程中直接导入了ipcRenderer模块——这种操作只有在nodeIntegration启用时才能实现,而这种直接访问Electron内置Node模块的方式,也会间接触发Electron对vm模块的内部调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:23:25