请注意,我使用的是 NodeJS v16.16.0
当使用 nexe 编译我的文件时,一切都按预期工作,直到我尝试更改文件位置,此时程序停止运行。寻求解决此问题的指导。
看起来这是由sqlite3导入引起的,所以我仍然使用Nexe使用位于node_modules文件夹中的-r node_sqlite3.node选项以这种方式导入它,但它仍然不起作用。
"compile": "nexe ./vare.js -r node_modules/sqlite3/build/Release/node_sqlite3.node -o compiled --build"
此行位于我的 package.json
当我执行我编译的.exe时, 当可执行文件位于我构建它的目录时它会起作用,因此如果我更改到另一个目录,它会显示此错误:
C:\Users\Administrator\Documents>compiled.exe
C:\Users\Administrator\Documents\node_modules\bindings\bindings.js:211
throw new Error(
^
Error: Could not find module root given file: "C:\Users\Administrator\Documents\node_modules\sqlite3\lib\sqlite3-binding.js". Do you have a `package.json` file?
at Function.getRoot (C:\Users\Administrator\Documents\node_modules\←[4mbindings←[24m\bindings.js:211:13)
at bindings (C:\Users\Administrator\Documents\node_modules\←[4mbindings←[24m\bindings.js:82:32)
at Object.<anonymous> (C:\Users\Administrator\Documents\node_modules\←[4msqlite3←[24m\lib\sqlite3-binding.js:1:37)
←[90m at Module._compile (node:internal/modules/cjs/loader:1105:14)←[39m
←[90m at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)←[39m
←[90m at Module.load (node:internal/modules/cjs/loader:981:32)←[39m
←[90m at Function.Module._load (node:internal/modules/cjs/loader:822:12)←[39m
←[90m at Module.require (node:internal/modules/cjs/loader:1005:19)←[39m
←[90m at require (node:internal/modules/cjs/helpers:102:18)←[39m
at Object.<anonymous> (C:\Users\Administrator\Documents\node_modules\←[4msqlite3←[24m\lib\sqlite3.js:2:17)
我也有同样的问题。我通过使用 better-sqlite3 模块解决了这个问题。它有一个nativeBinding选项。该选项可用于指定 sqlite 本机 .node 依赖文件的文件路径。如果提供此选项,则 better-sqlite3 模块将不会使用绑定模块来定位 .node 文件,因此不会发生绑定模块的错误。
let dbOptions = { fileMustExist: true };
if (appEnv.inPKG) {
dbOptions.nativeBinding = path_join(
appEnv.pkgRoot,
"node_modules/better-sqlite3/build/Release/better_sqlite3.node"
);
}
let db = new Database(dbPath, dbOptions);
// now works..