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

2022-04-02 23:57:52 +08:00
 MuscleOf2016

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

7465 次点击
所在节点    Node.js
14 条回复
Kasumi20
2022-04-03 00:03:58 +08:00
WFT ? SQLite 是 ANSI-C 源代码。它必须先编译成机器代码才能使用。本文是编译 SQLite 的各种方法的指南。

https://www.sqlite.org/howtocompile.html
MuscleOf2016
2022-04-03 00:05:04 +08:00
@Kasumi20 少打了 是 node 的 better-sqlite3
Kasumi20
2022-04-03 00:12:49 +08:00
MuscleOf2016
2022-04-03 00:15:57 +08:00
@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-04-03 00:55:16 +08:00
@MuscleOf2016 这说的是你的 nodejs 是 76 ,但库是 79 编译的,所以你需要 79 的 nodejs
littlepanzh
2022-04-03 00:59:57 +08:00
76 是 electron 编译的 node 版本,报错不是告诉你了,rebuild 一下

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

mapbox/node-sqlite3 已经使用了 N-API
MuscleOf2016
2022-04-05 22:50:13 +08:00
@magicdawn 意思 76 对应 9.0.0-beta.1 版本的 nodejs ,那我现在是不是没办法用这个版本去编译了,找不到地方去下载了。。
MuscleOf2016
2022-04-05 22:52:53 +08:00
@magicdawn
建议选一个支持 N-API 的包, 这样不用重新 build (包使用的 napi 版本 < runtime napi 版本即可)
--------------
指定 target: '8.0.0',napi 57 的也是不行。。
magicdawn
2022-04-05 22:55:41 +08:00
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-04-13 14:53:15 +08:00
遇到过相同的问题 ,当时是想在 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