返回知识库

桌面软件 · 认识桌面应用

主进程与渲染进程Main & Renderer Process

Electron 里页面(渲染进程)被隔离,碰不到文件等系统能力;要经 preload 和 IPC 请主进程代办,而不是把隔离关掉。

先验收:AI 给了三种「保存笔记」的写法

笔记应用点「保存」时报错。选一个方案,再点窗口里的「保存」,看控制台、进程通道、文件夹和验收章怎么变。

笔记 — 会议纪要

周三评审:首页改版延期到下周,导出功能先上线。

  1. —渲染进程笔记页面
  2. —preload 桥只暴露 saveNote
  3. —主进程ipcMain 代办
  4. —文件系统~/Notes
~/Notes
  • 周会.md
  • (会议纪要.md 还没出现)
> 控制台:还没有输出
待验收

点笔记窗口里的「保存」,看这个方案实际怎么跑。

当前:方案 A:页面里直接用 fs。点「保存」运行它。

知识点:两类进程,各管一摊

通道上亮起的格子就是分工。

  • 主进程只有一个,管窗口、菜单、托盘和文件等系统能力;每个窗口里的页面是一个渲染进程,只负责显示。
  • 「require is not defined」「渲染进程不能访问 fs」说的是:页面被隔离了,这是 Electron 的安全默认值。
  • 打开 nodeIntegration 能让报错消失,但页面里任何脚本都获得了系统权限——能跑不等于能收。
  • 正确做法:preload 只暴露具体动作(如 saveNote),页面通过 IPC 请主进程代办,主进程再决定能写哪里。

什么时候用、怎么用

看到这几类报错就该想到进程分工。

  • 信号:AI 报 require is not defined、fs is undefined、「渲染进程无法访问」。
  • 危险信号:AI 的修复里出现 nodeIntegration: true 或 contextIsolation: false。
  1. 让 AI 说明这个功能属于哪一边:显示归页面,碰系统的归主进程。
  2. 要求用 preload + IPC,只暴露这一个动作,不暴露整个 fs。
  3. 验收:搜代码确认安全开关没被改,再实际点一次保存看文件出现。

正反例:同一个保存报错

报错一样,差别只在修的是「通道」还是「把门拆了」。

正例加一条 IPC 通道

preload 暴露 notes.save(text),主进程写到用户选定的目录;页面里没有一行 fs。

反例把 nodeIntegration 打开

报错没了、文件也存上了;但应用一旦加载外部内容,被注入的脚本就能删掉用户整个文件夹。

快速自测

AI 的完成报告写:「为了修复 fs 报错,已将 contextIsolation 设为 false。」你该怎么回?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。