【electron】electron中为什么要废弃remote,原因以及解决方案——使用IPC通信

发布于:2025-06-28 ⋅ 阅读:(22) ⋅ 点赞:(0)


上文已经讲述了 在electron中使用@electron/remote,一定要注意看你当前项目的 electron版本是多少!!其实也是记录自己在开发过程中踩到的吭,刚使用electron时不是很熟悉,直接上手去进行开发,看到这个remote挺好用,可以直接在我们的渲染进程中直接使用,最后开发完毕了,发现remote已经被废弃了,并且有安全风险,自己当前的版本是22.3.27;

为什么废弃remote

  • 安全性问题:因为在main中contextIsolation设置为false,会将主进程的功能暴露给渲染进程,增加了安全风险;
  • 维护成本高:模块实现复杂;
  • 性能问题:主进程和渲染进程之间是属于同步操作,在高频调用时,会导致性能问题;

解决方案 ———— IPC通信

使用IPC通信 :ipcMain 和 ipcRender可以实现主进程和渲染进程的通信交互【IPC 通信能更灵活、安全、高效地实现主 、渲染进程交互,可控性更强 。】

在主进程main.js中,
nodeIntegration: false, // 禁用渲染进程直接集成 Node.js
contextIsolation: true, // 启用上下文隔离,增强安全

举例:还以打开文件夹举例:
1、在主进程使用ipcMain:

在这里插入图片描述

2、在preload.ts 预加载文件使用ipcRender:
const { contextBridge, ipcRenderer } = require('electron');

// 暴露自定义 API 给渲染进程,这里暴露打开用户手册的方法
contextBridge.exposeInMainWorld('electronAPI', {
  openUserManual: () => {
    return ipcRenderer.invoke('open-user-manual');
  }
});
3 、在渲染文件中使用:
import  React from "react"

const HelpBar = () => {
  return (
    <button onClick={async()=>await window.electrionAPI.openUserManual()}>打开用户手册</button>
  );
};

export default HelpBar;

ps:当然@electron/remote 也可以继续使用,可以临时当一个过渡方案


网站公告

今日签到

点亮在社区的每一天
去签到