2.4 KiB
Desktop 桌面端
apps/desktop 是 v0.4.0 新增的 Electron 桌面应用。当前已经完成
Electron 壳、受限 preload、进程内应用服务、原生 Markdown 文件选择、
同目录图片解析、隐藏分页窗口、Electron Chromium PDF 输出、原生 PDF
另存为和 Windows 安装包验证。
开发
从仓库根目录运行:
npm run desktop:dev
桌面端不启动 Fastify,也不占用本地 HTTP 端口。React 界面通过受限 IPC
调用 packages/application 中的 Markdown 渲染和主题服务,PDF 由
Electron 自带 Chromium 生成。Web 与 Docker 继续通过 Fastify HTTP
适配器使用同一套应用服务。
构建与打包
npm run build -w @md-to-pdf/desktop
npm run desktop:package
npm run make -w @md-to-pdf/desktop
版本化目录包、NSIS Setup.exe 和 ZIP 输出到
apps/desktop/out/v0.4.3/。该目录被 Git 忽略。公司内部分发以
md-to-pdf-0.4.3-x86_64-Setup.exe 为正式安装包,ZIP 作为免安装
辅助包;当前未配置代码签名,Windows 首次运行可能显示“未知发布者”
提示。
NSIS 使用标准辅助安装模式,支持选择当前用户/所有用户安装和自定义安装 目录,并创建桌面及开始菜单快捷方式。正式安装包作为 Gitea Release 附件 发布,不提交进 Git 历史。
桌面和开始菜单快捷方式由 build/installer.nsh 显式创建,安装完成后的
“运行”操作直接启动 md-to-pdf.exe,不依赖快捷方式文件。
产品名称、窗口标题、安装包名称和开始菜单名称保持为
“Markdown PDF 导出器”,实际 Windows 主程序与进程文件固定为
md-to-pdf.exe。
当前目录包只包含一套 Electron Chromium,不携带 Playwright Chromium。
Web 静态资源作为只读资源放在 Electron resources/dist 下,生产环境通过
mdpdf://bundle/ 自定义协议加载。
安全边界
- 应用窗口和 PDF 窗口均关闭 Node Integration;
- 启用 Context Isolation 和 Chromium Sandbox;
- preload 只暴露打开 Markdown、渲染、主题、生成 PDF 和保存 PDF 所需 的窄接口;
- 本地图片只能从当前 Markdown 所在目录内读取,并拒绝路径穿越和符号 链接越界;
- 主进程校验 IPC 发送者和分页载荷;
- PDF 窗口使用独立内存 Session,并阻止外部网络资源;
- 应用页面使用自定义协议,不使用
file://。