sqlite 编译需要 NODE_MODULE_VERSION 76,但是找不到对应 node 版本

2022 年 4 月 2 日
 MuscleOf2016

根据 node 官网的版本记录: https://nodejs.org/zh-cn/download/releases/ 直接从 NODE_MODULE_VERSION 72 ,跳过到了 79 ,那现在提示 NODE_MODULE_VERSION 76 ,我该咋办。。。实现没办法了。。

8240 次点击
所在节点    Node.js
14 条回复
Kasumi20
2022 年 4 月 3 日
WFT ? SQLite 是 ANSI-C 源代码。它必须先编译成机器代码才能使用。本文是编译 SQLite 的各种方法的指南。

https://www.sqlite.org/howtocompile.html
MuscleOf2016
2022 年 4 月 3 日
@Kasumi20 少打了 是 node 的 better-sqlite3
Kasumi20
2022 年 4 月 3 日
MuscleOf2016
2022 年 4 月 3 日
@Kasumi20 已经安装了全局的 node-gyp ,
```
Uncaught Error: The module '\\?\D:\better-sqlite3\build\better_sqlite3.node' was compiled against a different Node.js version using NODE_MODULE_VERSION 79. This version of Node.js requires NODE_MODULE_VERSION 76. Please try re-compiling or re-installing the module (for instance, using npm rebuildornpm install).
```
我很奇怪,提示我需要 76 版本,但是我找不到 76 对应的 node 版本号
skies457
2022 年 4 月 3 日
@MuscleOf2016 这说的是你的 nodejs 是 76 ,但库是 79 编译的,所以你需要 79 的 nodejs
littlepanzh
2022 年 4 月 3 日
76 是 electron 编译的 node 版本,报错不是告诉你了,rebuild 一下

https://www.npmjs.com/package/electron-releases
cweijan
2022 年 4 月 3 日
是因为 sqlite 内置了一个编译后的.node 文件, 和你的 nodejs 版本不兼容, 如果你安装了 node-gyp 的话, 就会 npm install 时使用 node-gyp 重新编译, 使用 node-gyp 需要 gcc 编译工具, 如果是 windows, 通过执行`npm install -g windows-build-tools`安装.
magicdawn
2022 年 4 月 4 日
magicdawn
2022 年 4 月 4 日
magicdawn
2022 年 4 月 4 日
建议选一个支持 N-API 的包, 这样不用重新 build (包使用的 napi 版本 < runtime napi 版本即可)

mapbox/node-sqlite3 已经使用了 N-API
MuscleOf2016
2022 年 4 月 5 日
@magicdawn 意思 76 对应 9.0.0-beta.1 版本的 nodejs ,那我现在是不是没办法用这个版本去编译了,找不到地方去下载了。。
MuscleOf2016
2022 年 4 月 5 日
@magicdawn
建议选一个支持 N-API 的包, 这样不用重新 build (包使用的 napi 版本 < runtime napi 版本即可)
--------------
指定 target: '8.0.0',napi 57 的也是不行。。
magicdawn
2022 年 4 月 5 日
NODE_MODULE_VERSION 在头文件里定义的,
用 electron 的头文件不行?

cd /path-to-module/
HOME=~/.electron-gyp node-gyp rebuild --target=1.2.3 --arch=x64 --dist-url=https://electronjs.org/headers
wangtian2020
2022 年 4 月 13 日
遇到过相同的问题 ,当时是想在 electron 上用 sqlite ,一开始瞄准了要用 better-sqlite3
当时忙活了一下午,各种 rebuild 失败死活装不上,issue 看了个遍也没找到办法

然后就直接用 sqlite3 了,用 promise 封住一下,照样用
"sqlite3": "^5.0.2",

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/844663

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX