Nodejs sqlite 编译需要 NODE_MODULE_VERSION 76,但是找不到对应 node 版本
Nodejs sqlite 编译需要 NODE_MODULE_VERSION 76,但是找不到对应 node 版本
根据 node 官网的版本记录: https://nodejs.org/zh-cn/download/releases/ 直接从 NODE_MODULE_VERSION 72 ,跳过到了 79 ,那现在提示 NODE_MODULE_VERSION 76 ,我该咋办。。。实现没办法了。。
WFT ? SQLite 是 ANSI-C 源代码。它必须先编译成机器代码才能使用。本文是编译 SQLite 的各种方法的指南。
https://www.sqlite.org/howtocompile.html
少打了 是 node 的 better-sqlite3
https://github.com/JoshuaWise/better-sqlite3/issues/786
你可能没有安装 node-gyp ?
已经安装了全局的 node-gyp ,<br>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).<br>
我很奇怪,提示我需要 76 版本,但是我找不到 76 对应的 node 版本号
这说的是你的 nodejs 是 76 ,但库是 79 编译的,所以你需要 79 的 nodejs
76 是 electron 编译的 node 版本,报错不是告诉你了,rebuild 一下
https://www.npmjs.com/package/electron-releases
是因为 sqlite 内置了一个编译后的.node 文件, 和你的 nodejs 版本不兼容, 如果你安装了 node-gyp 的话, 就会 npm install 时使用 node-gyp 重新编译, 使用 node-gyp 需要 gcc 编译工具, 如果是 windows, 通过执行npm install -g windows-build-tools
安装.
建议选一个支持 N-API 的包, 这样不用重新 build (包使用的 napi 版本 < runtime napi 版本即可)
mapbox/node-sqlite3 已经使用了 N-API
意思 76 对应 9.0.0-beta.1 版本的 nodejs ,那我现在是不是没办法用这个版本去编译了,找不到地方去下载了。。
建议选一个支持 N-API 的包, 这样不用重新 build (包使用的 napi 版本 < runtime napi 版本即可)
--------------
指定 target: ‘8.0.0’,napi 57 的也是不行。。
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
遇到过相同的问题 ,当时是想在 electron 上用 sqlite ,一开始瞄准了要用 better-sqlite3
当时忙活了一下午,各种 rebuild 失败死活装不上,issue 看了个遍也没找到办法
然后就直接用 sqlite3 了,用 promise 封住一下,照样用
"sqlite3": “^5.0.2”,
针对你提到的问题,Node.js 和 SQLite 模块的兼容性通常依赖于 Node.js 的 ABI(Application Binary Interface)版本号,即 NODE_MODULE_VERSION
。这个版本号随着 Node.js 的不同版本而变化。当你遇到因为 NODE_MODULE_VERSION
不匹配而导致的编译问题时,通常的解决方案包括以下几种:
-
安装匹配的 Node.js 版本: 你可以通过 Node.js 官网 或使用 nvm(Node Version Manager)来安装一个与你的
sqlite3
模块兼容的 Node.js 版本。例如,你可以使用 nvm 来安装一个合适的版本:nvm install <version> # 替换 <version> 为目标版本号 nvm use <version> # 切换到该版本
-
重新编译 sqlite3 模块: 如果你已经安装了合适的 Node.js 版本,但仍然遇到问题,尝试手动重新编译
sqlite3
模块:npm uninstall sqlite3 npm install sqlite3 --build-from-source
-
查找匹配的 ABI 版本: 你可以查阅 Node.js ABI 版本对照表 来找到与
NODE_MODULE_VERSION 76
对应的 Node.js 版本。
选择以上任一种方法后,应该能够解决你遇到的编译问题。如果问题依旧,请检查你的环境变量设置或寻求更具体的错误信息来进行调试。