Electron 引入 better-sqlite3 流程及踩坑记录
我是萌新可能我经历太少,但这个引入实在是太恶心了。一个 node 环境,引入个依赖要 python 就算了,还要安装 visual studio 这一坨,我又不写 python 和 c++ 代码,我就引个依赖要费这么大劲。而且 Electron 的版本和它构建工具的版本,还有 python 都有小冲突,不是这个没跟上这个就是这个没跟上这个,气死我了。
踩坑的时候网上居然很少有相关的记录,也没见到吐槽这个的。好不容易有几条 csdn 点进去就收费,一怒之下问了边查资料边问 AI,终于给我解决了,防止我以后忘记,赶紧记录下来。
tips
我的 Electron 是通过 @quick-start/electron 构建的,最开始的 node 版本是截止于今日(2025年5月6日)官网的长期支持版本(v22.15.0),但经过折腾后就改成了最新版(v23.11.0),目前还没有出问题,两个版本都能正常运行我目前写好的代码。
环境准备
node-gyp
首先要有一个已经构建好的 Electron 项目,使用 npm install 引入 node-gyp 版本为 11.2.0 ,我是按最新安装的,如果想和我一样在后面加 @11.2.0 。在 Electron 创建的时候这个依赖可能会自带,如果能正常用就不用再手动加这个依赖
npm install -g node-gyp
Python
去官网:https://www.python.org/downloads/
下载 Python 3.11.9 ,这是 3.11.x 版本能下载的最新版本,在官网能看到 3.11.12 但我没找到方式下载。安装记得添加到环境变量中,cmd 输入 python --version 可以看到版本号。
Visual Studio
去官网:https://visualstudio.microsoft.com/zh-hans/
我已经安装好了。说实话我也不知道到底需要哪些组件,而且在探索过程中又不知道哪里看到 Node 已经继承了部分工具,已经不需要再自己安装这个了。如果你在构建的时候遇到缺少 Visual Studio 相关的问题,就安装试试。因为踩坑太多我反复下载安装了很多次,只能把我已安装的组件提供参考。

安装 better-sqlite3
官网(应该是吧):better-sqlite3 - npm
安装 better-sqlite3 和 @types/better-sqlite3 我的项目是 TypeScript 的,要有一个声明模块才能被 TS 识别。版本分别为 @11.9.1 和 @7.6.13
npm i better-sqlite3
npm i @types/better-sqlite3
可能遇到的问题
如果正常走下来能运行成功那很幸运了……
网络连接超时
Error: request to https://www.electronjs.org/headers/v35.2.1/node-v35.2.1-headers.tar.gz failed, reason: connect ETIMEDOUT 13.107.246.73:443
我的 Electron 项目创建后会自带一个组件 electron-builder ,在 npm install 时会自动运行这个依赖进行构建,同时也是能重新编译 better-sqlite3 的,因为我编译完就成功了……
解决方法是给 npm 添加代理,没错,设置镜像什么的都试过了没一个能用的。如果你有 clash 之类的梯子,开启局域网代理,然后输入本机的 ipv4 ip + 端口号 就能让局域网设备使用代理了。也有别的方法可以自行探索。
npm config set proxy http://xxx.xxx.xx.xxx:xxxx
编译版本与Node版本不匹配
The module '\\?\D:\xxx\xxx\xxx\xxx\better_sqlite3.node' was compiled against a different Node.js version using NODE_MODULE_VERSION 127. This version of Node.js requires NODE_MODULE_VERSION 133. Please try re-compiling or re-installing the module (for instance, using `npm rebuild` or `npm install`).
这是因为下载的模块有时候是预编译的,不一定是为你现在的Node版本所准备,如果出现这个情况就需要自己在本地重新编译。
查了很多资料,有的说用 electron-rebuild 有的说 npm rebuild,最后是用自带的 electron-builder 运行成功的(也有可能是 node-gyp 没问题了),使用 npm install
python留坑
ModuleNotFoundError: No module named 'distutils'
前面说到的 electron-builder 会用到 node-gyp 进行重新构建。Python 在 3.12.x 开始在标准库移除了 distutils ,而最新的 node-gyp 却还在用 Orz 。这就是为什么要降版本到 3.11 。
分享
最后分享一下我构建完的 better-sqlite3 不保证有用就是了……因为我也没成功导入过预编译的版本🥲我是直接从 node_modules 复制出来的
更多推荐

所有评论(0)