electron 串行端口在电子伪造(+webpack)渲染器无法加载绑定?

ctzwtxfj  于 2023-01-06  发布在  Electron
关注(0)|答案(1)|浏览(434)

我有一个问题,让serialport包在渲染器中的Electron Forge + Webpack中工作:
使用电子锻造CLI,我做了一个全新的项目:

npm init electron-app@latest my-new-app -- --template=webpack

然后我安装了最新的serialport包:

npm install serialport

我想在渲染器中使用serialport,所以我将其导入renderer.js:

import { SerialPort } from "serialport";

但是,运行此命令会出现一系列导入错误:

∮我所尝试的∮

  • 我尝试将此导入移到preload.js中,但这会导致另一个错误,即没有预构建版本:

错误:未找到平台= win32 arch = x64运行时=电子abi = 110 uv = 1 libc = glibc节点= 16.17.1电子= 22.0.0 webpack = true的本机内部版本

  • 尝试使用electron-rebuild来重建串行端口electron-rebuild -f -w serialport
  • 我尝试启用nodeIntegration: true

这是一个内部开发测试工具,所以如果这是一个解决方案,那么启用通常不建议的东西的安全性对我来说是可以的。

ttcibm8c

ttcibm8c1#

当我在Electron的主进程中导入serialport时,我也遇到了No native build was found for platform错误消息。我使用electron-forge来构建我的可分发文件。我也尝试手动使用electron-rebuild,但没有效果。
我花了几天时间研究Stack Overflow和GitHub问题,并做了一些实验。最后,看起来这个问题是由electron-rebuild在某些平台上没有检测到serialport的本地节点模块引起的。在我的例子中,electron-rebuild正在我的M1 MacBook Pro上重建serialport本地节点模块(arm 64),但没有在Raspberry Pi 4 Model B(armv7 l)上重建这些模块。
最后为我解决这个问题的方法(归功于GitHub的评论)是在Electron的打包步骤之前运行以下命令:

rm --recursive node_modules/@serialport
npm install --no-save --build-from-source serialport@10.4.0

这将首先删除您的node_modules/@serialport文件夹中的所有内容,该文件夹包含bindings-cpp包中为几个平台预构建的本机节点模块。接下来,我们从头开始构建serialport的本机节点模块,以便我们(希望)最终得到一个与当前平台匹配的本机节点模块。
确保上面命令中使用的serialport版本与您依赖的版本匹配!

相关问题