You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PKG编译Node.js项目后运行exe时报sqlite3相关EISDIR错误

问题根因

你只配置了打包sqlite3的package.json,但node-pre-gyp的路径查找逻辑在pkg的快照虚拟文件系统中无法正确解析路径,返回的binding_path最终指向目录而非.node二进制绑定文件,才会触发EISDIR报错。

可行解决方案

方案一:修改绑定引入逻辑(最稳定)

步骤1:更新pkg配置

在assets字段中添加sqlite3的二进制绑定文件匹配规则,同时确认打包目标和你安装sqlite3时的Node版本、平台架构严格对应:

"pkg": {
  "scripts": [
    "commands/*.js",
    "events/*.js",
    "node_modules/es-get-iterator/*.js"
  ],
  "assets": [ 
    "media/**/*",
    "node_modules/sqlite3/package.json",
    "node_modules/sqlite3/lib/binding/**/*.node"
  ],
  "targets": ["node18-win-x64"] // 替换为你实际使用的Node版本+平台架构
}

步骤2:绕过node-pre-gyp路径查找

直接修改node_modules/sqlite3/lib/sqlite3-binding.js的代码,替换原有逻辑,直接引入对应二进制文件:

var path = require('path');
// 路径替换为你实际的.node文件路径,和assets中配置的打包路径对应
var binding = require(path.join(__dirname, './binding/napi-v6-win32-x64/node_sqlite3.node'));
module.exports = exports = binding;

步骤3:重新打包即可正常运行。

方案二:替换依赖(低改造成本)

直接将依赖替换为对pkg兼容性更好的better-sqlite3,仅需要在pkg的assets中添加node_modules/better-sqlite3/build/Release/better_sqlite3.node即可,不需要修改源码,适配成本极低。


内容的提问来源于stack exchange,提问作者Neklioz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 20:45:04