V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MuscleOf2016
V2EX  ›  Node.js

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

  •  
  •   MuscleOf2016 · 2022-04-02 23:57:52 +08:00 · 7468 次点击
    这是一个创建于 996 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    14 条回复    2022-04-13 14:53:15 +08:00
    Kasumi20
        1
    Kasumi20  
       2022-04-03 00:03:58 +08:00
    WFT ? SQLite 是 ANSI-C 源代码。它必须先编译成机器代码才能使用。本文是编译 SQLite 的各种方法的指南。

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

    https://www.npmjs.com/package/electron-releases
    cweijan
        7
    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
        8
    magicdawn  
       2022-04-04 21:28:01 +08:00
    magicdawn
        9
    magicdawn  
       2022-04-04 21:33:32 +08:00
    magicdawn
        10
    magicdawn  
       2022-04-04 21:37:07 +08:00
    建议选一个支持 N-API 的包, 这样不用重新 build (包使用的 napi 版本 < runtime napi 版本即可)

    mapbox/node-sqlite3 已经使用了 N-API
    MuscleOf2016
        11
    MuscleOf2016  
    OP
       2022-04-05 22:50:13 +08:00
    @magicdawn 意思 76 对应 9.0.0-beta.1 版本的 nodejs ,那我现在是不是没办法用这个版本去编译了,找不到地方去下载了。。
    MuscleOf2016
        12
    MuscleOf2016  
    OP
       2022-04-05 22:52:53 +08:00
    @magicdawn
    建议选一个支持 N-API 的包, 这样不用重新 build (包使用的 napi 版本 < runtime napi 版本即可)
    --------------
    指定 target: '8.0.0',napi 57 的也是不行。。
    magicdawn
        13
    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
        14
    wangtian2020  
       2022-04-13 14:53:15 +08:00
    遇到过相同的问题 ,当时是想在 electron 上用 sqlite ,一开始瞄准了要用 better-sqlite3
    当时忙活了一下午,各种 rebuild 失败死活装不上,issue 看了个遍也没找到办法

    然后就直接用 sqlite3 了,用 promise 封住一下,照样用
    "sqlite3": "^5.0.2",
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5687 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:09 · PVG 11:09 · LAX 19:09 · JFK 22:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.