Electron 音视频播放器开发踩坑

penguinway 发布于 8 天前 21 次阅读


一. 环境

笔者环境配置如下

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版本相匹配的版本

具体步骤

  1. 卸载掉存在的electron-rebuild和better-sqlite3
  2. 首先安装electron-rebuild,其后安装better-sqlite3,请注意该顺序非常重要
  3. 在package.json添加script["rebuild": "electron-rebuild -f -w better-sqlite3"]或直接运行electron-rebuild -f -w better-sqlite3
  4. 运行结束后即解决该问题

可能的报错

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>

随后即可解决该问题