点笔记窗口里的「保存」,看这个方案实际怎么跑。
桌面软件 · 认识桌面应用
主进程与渲染进程Main & Renderer Process
Electron 里页面(渲染进程)被隔离,碰不到文件等系统能力;要经 preload 和 IPC 请主进程代办,而不是把隔离关掉。
先验收:AI 给了三种「保存笔记」的写法
笔记应用点「保存」时报错。选一个方案,再点窗口里的「保存」,看控制台、进程通道、文件夹和验收章怎么变。
周三评审:首页改版延期到下周,导出功能先上线。
- —渲染进程笔记页面
- —preload 桥只暴露 saveNote
- —主进程ipcMain 代办
- —文件系统~/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。
- 让 AI 说明这个功能属于哪一边:显示归页面,碰系统的归主进程。
- 要求用 preload + IPC,只暴露这一个动作,不暴露整个
fs。 - 验收:搜代码确认安全开关没被改,再实际点一次保存看文件出现。
正反例:同一个保存报错
报错一样,差别只在修的是「通道」还是「把门拆了」。
preload 暴露 notes.save(text),主进程写到用户选定的目录;页面里没有一行 fs。
报错没了、文件也存上了;但应用一旦加载外部内容,被注入的脚本就能删掉用户整个文件夹。
快速自测
AI 的完成报告写:「为了修复 fs 报错,已将 contextIsolation 设为 false。」你该怎么回?
继续查证
术语的技术定义和行为以这些一手或权威资料为准。
下一步学
和本知识点经常一起出现的概念。