解决better-sqlite3连接 SQLite 时报错 Could not locate the bindings file

发布于 7 小时前 个人随笔 582 字 预计阅读时间: 3 分钟


AI 摘要

安装插件后,SQLite连接竟现神秘报错?揭秘better-sqlite3绑定文件失踪之谜,轻松解决!
内容纲要

报错

最近安装某插件后出现图示报错,

05:25:12.457 ✗ ERR [ChatAI][Skills] 初始化失败: Could not locate the bindings file. Tried:
 → C:\Users\liuzj\Documents\TRSS-Yunzai\node_modules\.pnpm\better-sqlite3@12.4.1\node_modules\better-sqlite3\build\better_sqlite3.node
 → C:\Users\liuzj\Documents\TRSS-Yunzai\node_modules\.pnpm\better-sqlite3@12.4.1\node_modules\better-sqlite3\build\Debug\better_sqlite3.node
 → C:\Users\liuzj\Documents\TRSS-Yunzai\node_modules\.pnpm\better-sqlite3@12.4.1\node_modules\better-sqlite3\build\Release\better_sqlite3.node
 → C:\Users\liuzj\Documents\TRSS-Yunzai\node_modules\.pnpm\better-sqlite3@12.4.1\node_modules\better-sqlite3\out\Debug\better_sqlite3.node
 → C:\Users\liuzj\Documents\TRSS-Yunzai\node_modules\.pnpm\better-sqlite3@12.4.1\node_modules\better-sqlite3\Debug\better_sqlite3.node
 → C:\Users\liuzj\Documents\TRSS-Yunzai\node_modules\.pnpm\better-sqlite3@12.4.1\node_modules\better-sqlite3\out\Release\better_sqlite3.node
 → C:\Users\liuzj\Documents\TRSS-Yunzai\node_modules\.pnpm\better-sqlite3@12.4.1\node_modules\better-sqlite3\Release\better_sqlite3.node
 → C:\Users\liuzj\Documents\TRSS-Yunzai\node_modules\.pnpm\better-sqlite3@12.4.1\node_modules\better-sqlite3\build\default\better_sqlite3.node
 → C:\Users\liuzj\Documents\TRSS-Yunzai\node_modules\.pnpm\better-sqlite3@12.4.1\node_modules\better-sqlite3\compiled\24.14.1\win32\x64\better_sqlite3.node
 → C:\Users\liuzj\Documents\TRSS-Yunzai\node_modules\.pnpm\better-sqlite3@12.4.1\node_modules\better-sqlite3\addon-build\release\install-root\better_sqlite3.node
 → C:\Users\liuzj\Documents\TRSS-Yunzai\node_modules\.pnpm\better-sqlite3@12.4.1\node_modules\better-sqlite3\addon-build\debug\install-root\better_sqlite3.node
 → C:\Users\liuzj\Documents\TRSS-Yunzai\node_modules\.pnpm\better-sqlite3@12.4.1\node_modules\better-sqlite3\addon-build\default\install-root\better_sqlite3.node
 → C:\Users\liuzj\Documents\TRSS-Yunzai\node_modules\.pnpm\better-sqlite3@12.4.1\node_modules\better-sqlite3\lib\binding\node-v137-win32-x64\better_sqlite3.node

错误日志分析

在 Node 服务端程序连接 SQLite 是用了 better-sqlite3 这个库,它是 Node.js 中速度最快、最简单的 SQLite 库,在 Nestjs 里也是支持用 TypeORM 来基于这个库操作 SQLite 。

better-sqlite3 的产物

和普通的依赖包直接引入 dist 产物开箱即用不一样,它还需要编译一次原生绑定文件,默认情况下,它会尝试在安装时自动构建原生模块,对比本地在 node_modules 里的目录文件,和 npmjs 上的发布文件列表,会发现线上的发布版少了 better_sqlite3.node 这个文件,提示的报错信息也是少了这个文件。

解决方法

进入\node_modules\better-sqlite3文件夹,可以看到binding.gyp文件,右键命令行直接执行

pnpm build-release

等待编译完毕即可

参考

https://chengpeiquan.com/en/article/better-sqlite3-error-could-not-locate-the-bindings-file