运行代码报better-sqlite3与Node.js版本不兼容错误如何解决
问题说明
运行代码时抛出如下原生模块版本不匹配错误:
Error: The module '\?\C:\Users\ncid1\OneDrive\Desktop\Boblox\node_modules\better-sqlite3\build\Release\better_sqlite3.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 83. This version of Node.js requires
NODE_MODULE_VERSION 108. Please try re-compiling or re-installing
the module (for instance, usingnpm rebuildornpm install).
报错根因
better-sqlite3是带C++原生扩展的npm包,安装阶段会针对当前运行的Node.js版本编译匹配的二进制文件:
- NODE_MODULE_VERSION 83 对应 Node.js 14.x 版本
- NODE_MODULE_VERSION 108 对应 Node.js 18.x 版本
你当前项目里留存的better-sqlite3是之前在Node.js 14环境下编译安装的,切换到Node.js 18运行环境后没有重新编译适配,就会触发二进制不兼容报错。
注意:你的项目存放在OneDrive同步目录下,操作修复前建议暂时暂停OneDrive同步,避免文件被同步进程占用导致写入/编译失败。
修复步骤
按顺序执行以下操作即可解决问题:
- 切到项目根目录
C:\Users\ncid1\OneDrive\Desktop\Boblox,删除旧的依赖目录和锁文件:可以直接在资源管理器手动删除node_modules文件夹,以及目录下的版本锁文件(npm用户删package-lock.json,yarn用户删yarn.lock,pnpm用户删pnpm-lock.yaml)。 - 在当前项目目录打开终端,执行
node -v确认输出的版本号为18.x,如果你安装了nvm-windows这类Node多版本管理工具,务必确认当前终端激活的是跑项目要用的Node 18版本,避免依赖装到其他版本的目录下。 - 重新安装全量依赖:npm用户执行
npm install,绝大多数场景下安装过程中better-sqlite3会自动拉取或编译适配Node 18的二进制文件,装完直接启动项目即可正常运行。 - 如果安装完成后还是报相同错误,单独执行模块重编译命令:
npm rebuild better-sqlite3,等编译流程跑完再启动项目。 - 若重编译步骤报错退出,先检查本地是否安装了两个必备编译依赖:Python 3.7+、Visual Studio生成工具(Windows环境下安装时需要勾选「使用C++的桌面开发」工作负载),依赖安装完成后重新执行rebuild命令即可。
内容的提问来源于stack exchange,提问作者Pickle
相关产品推荐
相关产品推荐

