如何在Electron中重建epoll包并解决openssl_fips未定义报错
问题核心原因
你遇到的openssl_fips is not defined报错,本质是旧版本Electron(你用的v8.2.0)的node-gyp配置和当前编译环境的openssl参数不匹配,触发了binding.gyp里的条件判断异常,而epoll是你用到的树莓派GPIO相关依赖的底层原生包,必须适配Electron的运行时版本编译才能正常使用。
可行解决步骤
方案1:手动传入缺失的配置变量绕开报错
执行rebuild命令时直接给gyp传入空的openssl_fips参数,跳过配置判断:OPENSSL_FIPS="" npx electron-rebuild -f -w epoll参数说明:
-f强制重编译,-w epoll指定只重编译epoll包,节省时间。方案2:降级electron-rebuild到适配Electron 8.x的版本
你当前使用的electron-rebuild@3.2.3对Electron 8.x的兼容性很差,换成2.x分支的适配版本:# 卸载当前版本 npm uninstall electron-rebuild # 安装适配旧版Electron的版本 npm install --save-dev electron-rebuild@2.3.5 # 重新执行全量重编译 npx electron-rebuild方案3:匹配Node.js版本
Electron 8.2.0对应的内置Node大版本是12.x,如果你的树莓派系统全局安装的Node.js版本高于12.x,会导致原生包编译时的头文件版本不匹配,建议用nvm切换到Node.js 12.x版本后,删除node_modules和package-lock.json重新安装依赖,再执行rebuild。方案4:处理依赖冲突
你的依赖里同时存在rpi-gpio和rpio两个GPIO操作库,其中rpi-gpio依赖的epoll版本非常老旧,你可以先升级epoll到最新兼容版本再编译:npm install epoll@latest --save npx electron-rebuild或者移除
rpi-gpio依赖,只保留rpio,避免底层依赖冲突。
内容的提问来源于stack exchange,提问作者FaFa

