1

我的目标是为 Mac 创建一个发行版,为 Windows 创建另一个发行版。我想从我的 Mac 创建这两个发行版。目前,我的 Mac 发行版运行良好。

但我仍然对 Windows 发行版的 sqlite3 模块有问题。

我的应用程序使用的唯一本机模块是 sqlite3。

我真的不知道该怎么做才能最终让我的应用程序在 Windows 上正常运行。我不想在 Windows 机器上编译我的代码。我只想在我的 Mac 上编译我的代码。

我的配置是:

  • 节点 v12.2.0
  • npm v6.9.0
  • 电子 v5.0.1
  • sqlite3 v4.0.8
  • MacOS Mojave v10.14.0

尝试为 Windows 编译 sqlite3 模块:

node-pre-gyp install --directory=./node_modules/sqlite3 --target_platform=win32 --target_arch=x64 --target=12.2.0

node-pre-gyp 返回这些消息:

node-pre-gyp WARN Using request for node-pre-gyp https download
Warning: node-pre-gyp could not find exact match for 12.2.0
Warning: but node-pre-gyp successfully choose 12.0.0 as ABI compatible target
Warning: node-pre-gyp could not find exact match for 12.2.0
Warning: but node-pre-gyp successfully choose 12.0.0 as ABI compatible target

[sqlite3] Success: "/Users/Flooder/Programmes/electron/c4/node_modules/sqlite3/lib/binding/node-v72-win32-x64/node_sqlite3.node" is installed via remote

我得到一个新目录:./node_modules/sqlite3/lib/binding/node-v72-win32-x64

这个新目录重命名为:./node_modules/sqlite3/lib/binding/electron-v5.0-win32-x64

当我在 Windows 机器上尝试我的新发行版时,我收到此错误:

未捕获的异常:错误:模块 D:\c4\resources\app\node_modules\sqlite3\lib\binding\electron-v5.0-win32-x64\node_sqlite3.node 是使用 NODE_MODULE 72 针对不同的 Node.js 版本编译的。此版本的 Node.js 需要 NODE_MODULE_VERSION 70。请尝试重新编译或重新安装模块(例如,使用“npm rebuild”或“npm install”)。

...

好几个星期以来,我一直被这个问题困扰......

真的可以从 Mac 为 Windows 编译 sqlite3 模块吗?

node-pre-gyp 是正确的解决方案吗?如何?

4

1 回答 1

0

最后,这是我的解决方案:

  • 在我的 Mac 上安装了 Parallel Desktop;
  • 在此虚拟机中安装了 Windows 10;
  • 在虚拟Windows机器上安装node、npm、python、electron、electron-rebuild、sqlite等;
  • 在虚拟机上使用“electron-rebuild -f -w sqlite3”重新编译 sqlite3
  • 将新的 ./node_modules/sqlite3/lib/binding/electron-v5.0-win32-x64 从 Windows 复制到 Mac
  • 在 Mac 上,使用电子打包器重新编译了我的 PC 电子应用程序

现在,新的 Windows 编译版本可以在 Win 机器上运行!

于 2019-06-08T17:00:05.963 回答