electron 电子和串行端口

vhmi4jdf  于 2022-12-08  发布在  Electron
关注(0)|答案(2)|浏览(247)

我已经尝试了一切,试图让电子工作与个人电脑的串行端口。遵循所有的指示,为串行端口(甚至尝试建立本机模块)没有运气。
有没有人有任何运气让电子与串行端口一起工作?如果有,请分享你的智慧。

nafvub8i

nafvub8i1#

下面是我们在完成npm安装后(或升级electron或node-serial后)运行的命令。

  • 在Mac上
rm -rf node_modules/serialport/build/* 
node_modules/.bin/electron-rebuild -w serialport -f 
ls node_modules/serialport/build/Release
  • 在Win上
rmdir /S /Q node_modules\serialport\build\ 
node_modules\.bin\electron-rebuild -w serialport -f
dir node_modules\serialport\build\Release

根本问题是node-serialport是一个原生模块,因此必须编译它或使用与node版本相对应的预构建版本。(几乎总是)与您全局安装的节点版本不同。当您重建node-serialport时,您需要以 electron 预期的节点版本为目标。谢天谢地,electron-rebuild处理这个问题。安装它并运行它。它会判断出你使用的是什么版本的electron(假设你没有把它藏在某个意想不到的地方)。
我们遇到的另一个问题是,在运行electron-rebuild之前,你需要手动删除构建的工件,否则它不会生成新的工件。可能自从我上次看到这个问题以来,这个问题已经被修复了。
我包含了一个直接列表作为第三个命令,这样我就可以看到一些输出,让我放心文件已经生成。
我们的解决方案是基于一个关于节点串行端口问题的 * 超级 * 长的讨论。你不需要阅读它,但是如果你真的从https://github.com/EmergingTechnologyAdvisors/node-serialport/issues/538#issuecomment-273927595开始,他们说:
我想这个问题应该解决了,对吧?这不是一个问题,很长一段时间都没有出现过,因为节点串行端口在电子设备上工作正常。
主要的问题是,电子,每个人谁开始使用电子将有问题的原生模块,在这个线程的大多数问题是关于让原生模块的工作。
...然后问题就结束了。

ar7v8xwq

ar7v8xwq2#

正确的解决方案:

在Webpack配置中指定:

externals: {
    serialport: "commonjs2 serialport"
}

有关详细信息,请参阅webpack externals config

结果包中将不包括串行端口包!

之所以会发生此问题,是因为serialport软件包包含与brawsers(默认webpack目标)webpack targets docs不兼容本地插件

过期

我想,这是不可能做直接,但对我来说,工作的方式:
1.首先,可以创建具有所需所有串行端口逻辑类
1.通过任何方便你的方法(我通过commonJS模块)将它导入你的main.js文件(电子主进程文件)
1.在主进程中创建串行端口类的示例,并将其分配给全局对象(global.serialport = new yourSerialPort()
1.然后,在渲染器进程文件中键入:

const serialport = require('electron').remote.getGlobal('serialport')

1.如果你使用webpack,你必须在webpack.config.js中为你的渲染器进程添加下一行:

...
target: 'electron-renderer',
...

编辑:6.如果你想使用主电子过程的webpack,你应该在主过程的webpack配置中键入next:

target: "electron-main",
devtool: "source-map",
externals: {
    serialport: "commonjs2 serialport",
  },

source-map是可选的
我甚至认为,如果在webpack配置中标记它的外部依赖性,你可以从渲染器进程中要求串行端口,在我描述的方式上
都是...
现在你可以在你的电子应用程序的渲染端使用串行端口了

相关问题