← [ BACK_TO_NOTES ]

专题归档 · 2026 年 3 月(编辑分组,非实际写作日期)

MemoFlow Electron:ESM 和 better-sqlite3 让我追错了方向

从 __dirname 未定义到原生模块打包的一次桌面端排障记录。

明明没有写 __filename,却报它未定义

原始笔记记录了使用 SQLite、better-sqlite3,编写模型、服务与 IPC 监听后,程序在启动时抛出 __filename is not defined。一开始搜索业务文件并没有发现直接引用,问题可能发生在依赖加载或者构建产物与 ESM 的交界处。

用受控错误缩小范围

我还尝试在不同层的代码里有意制造错误,观察哪一处异常先被抛出,从而判断模块加载顺序与问题所在层级。这比不停替换代码更容易验证自己的判断。

ESM 之外还有原生模块

后来还遇到过 Electron 二进制下载不完整、better-sqlite3 的 .node 原生模块不能按普通 JS 打包,以及主进程和渲染进程模块边界等问题。这些错误都可能出现在启动阶段,但需要在不同层处理。

排查过程中还出现过把 __dirname 挂到 globalThis 的建议。但这样只是增加全局状态依赖,我更愿意先查清 ESM 与 CommonJS 的模块边界,而不是依赖临时绕过。

创建于 2026/3/5 更新于 2026/10/17
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本