一. 环境
笔者环境配置如下
Node.js==16.20.2
electron==4.2.12
electron-build==20.44.4
node-gyp==11.1.0
better-sqlite3==11.9.1
...
二. 踩坑一:better-sqlite3无法直接使用
因为开发时使用的node版本与使用的Electron内内置的node版本不一致,导致在运行时,控制台提示:
Uncaught Error: The module '\\?\D:\code\player\node_modules\better-sqlite3\build\Release\better_sqlite3.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 115. This version of Node.js requires
NODE_MODULE_VERSION 69. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
解决方案
使用electron-rebuild工具将better-sqlite3 rebuild为与electron内内置node版本相匹配的版本
具体步骤
- 卸载掉存在的electron-rebuild和better-sqlite3
- 首先安装electron-rebuild,其后安装better-sqlite3,请注意该顺序非常重要
- 在package.json添加script["rebuild": "electron-rebuild -f -w better-sqlite3"]或直接运行electron-rebuild -f -w better-sqlite3
- 运行结束后即解决该问题
可能的报错
1. 'openssl_fips' is not defined while evaluating condition 'openssl_fips != ""'
前往~/.electron-gyp/12.2.3/include/node/common.gypi,将
{'variables':{'built_with_electron': 1}}
覆盖为
{'variables':{'built_with_electron': 1, 'openssl_fips': ''}}
2. Error: Could not find any Visual Studio installation to use
谷歌上解决方法很多,但是笔者使用过后没有作用,最后根据一篇github issue将node版本降级到16后,在管理员权限下安装windows-build-tools后解决
npm install windows-build-tools -g
该模块笔者是node版本降级到16才能安装,其他更高版本均报错
Error: TypeError: 'process.env' only accepts a configurable whileinstall windows-build-tools

三. 踩坑二:Windows下无法直接打包Linux软件
解决方案
使用electronuserland/builder docker容器进行打包
docker pull electronuserland/builder
docker run --rm -ti -v {path to your code}:/project -w /project electronuserland/builder:16-wine-chrome-03.25
随后在开启的容器bash内执行npm run build即可
可能的报错
1.npm run build时gyp http GET https://atom.io/download/electron/v4.2.12/node-v4.2.12-headers.tar.gz
报错:

该下载请求因为atom存储库已经停用,会被转到GitHub说明情况的一篇博文上
解决方法是
npm install node-gyp -g
node-gyp install <your node version> --dist-url=https://nodejs.org/download/release/
npm run build --nodedir=~/.cache/node-gyp/<your node version>
随后即可解决该问题
Comments NOTHING