起初用的node-sqlite3,node-sqlite3是原生模块,网上查阅了很多资料,解决了本地编译运行的问题,却卡在了打包。(我本机64位,需要打包32位)。
尝试过vue-cli-plugin-electron-builder 加载原生node模块的方法;electron-rebuild的方法去重新编译等等各种方法都用尽了,还是不行。
大致原因分析了下,打包运行的时候,要获取的是32位的.node文件,在npm上没有对应的32位的sqlite3文件,最早的只有3点几版本的,现在都已经到5.0.2版本了,如果用早期的版本,那又会跟electron版本、node版本不兼容
最终解决方案:用better-sqlite3实现
better-sqlite3自称是性能超过sqlite3,这个我没有去验证。不过这个包的安装及使用说明强于sqlite3,使用起来也很方便,最主要的原因是解决了编译、打包的问题。官网上也有很详细的说明。
electron中使用安装better-sqlite3步骤如下:
1. 全局安装 node-gyp
npm install -g node-gyp
2. 安装 windows-build-tools(此工具可以编译原生.node 文件)
npm install --global windows-build-tools
3. 设置编辑工具的环境变量(注意 msbuild_path 的安装路径)
node版本不同,安装windows-build-tools的工具的路径也不一致,我node版本是v14.15.4,安装完windows-build-tools后的路径及版本如下
npm config set msvs_version 2017 npm config set msbuild_path "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe" //安装完windows-build-tools后看下具体的路径,better-sqlite3官网的此配置文档有误,得按照实际的目录配置
如果其他版本也可能安装的是2019,2019的配置参考如下
npm config set msvs_version 2017 npm config set msbuild_path "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe"
4. 安装剩余的依赖
npm install
vue.config.js中的相关配置也得更改下,因为是用的require方式引用
module.exports = { pluginOptions: { electronBuilder: { externals: ['better-sqlite3'], }, }, }
踩了2天的坑,希望对你有帮助。
编译时node版本不一致的报错
如果出现如下报错 was compiled against a different Node.js version using NODE_MODULE_VERSION 83这种错误,原因是electron用的node版本和你电脑的node版本不一致导致的。electron每个版本有对应的node版本,可以参考 abi_version
例如,我用的node版本是14.15.4,对应的abi_version 是83;electron版本是13.6.3,对应的abi_version 是89,那么启动编译的时候,就报了如下错误:
可以通过npm rebuild命令来强制使用electron的node版本,这样构建原生node模块时就能正常编译过了。
–target=13.6.3 当前使用的electron版本
–abi=89 electron版本对应的abi_version
npm rebuild --runtime=electron --disturl=https://atom.io/download/atom-shell --target=13.6.3 --abi=89
rebuild时,提示python报错
RT
重新安装下python即可,我这里是2017对应的python是2版本,打开python官网找到最后一个2版本下载安装后,再重新执行上面的rebuild即可。