我已经尝试了一切,试图让电子工作与个人电脑的串行端口。遵循所有的指示,为串行端口(甚至尝试建立本机模块)没有运气。有没有人有任何运气让电子与串行端口一起工作?如果有,请分享你的智慧。
nafvub8i1#
下面是我们在完成npm安装后(或升级electron或node-serial后)运行的命令。
rm -rf node_modules/serialport/build/* node_modules/.bin/electron-rebuild -w serialport -f ls node_modules/serialport/build/Release
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开始,他们说:我想这个问题应该解决了,对吧?这不是一个问题,很长一段时间都没有出现过,因为节点串行端口在电子设备上工作正常。主要的问题是,电子,每个人谁开始使用电子将有问题的原生模块,在这个线程的大多数问题是关于让原生模块的工作。...然后问题就结束了。
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.然后,在渲染器进程文件中键入:
global.serialport = new yourSerialPort()
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配置中标记它的外部依赖性,你可以从渲染器进程中要求串行端口,在我描述的方式上都是...现在你可以在你的电子应用程序的渲染端使用串行端口了
2条答案
按热度按时间nafvub8i1#
下面是我们在完成npm安装后(或升级electron或node-serial后)运行的命令。
根本问题是node-serialport是一个原生模块,因此必须编译它或使用与node版本相对应的预构建版本。(几乎总是)与您全局安装的节点版本不同。当您重建node-serialport时,您需要以 electron 预期的节点版本为目标。谢天谢地,electron-rebuild处理这个问题。安装它并运行它。它会判断出你使用的是什么版本的electron(假设你没有把它藏在某个意想不到的地方)。
我们遇到的另一个问题是,在运行electron-rebuild之前,你需要手动删除构建的工件,否则它不会生成新的工件。可能自从我上次看到这个问题以来,这个问题已经被修复了。
我包含了一个直接列表作为第三个命令,这样我就可以看到一些输出,让我放心文件已经生成。
我们的解决方案是基于一个关于节点串行端口问题的 * 超级 * 长的讨论。你不需要阅读它,但是如果你真的从https://github.com/EmergingTechnologyAdvisors/node-serialport/issues/538#issuecomment-273927595开始,他们说:
我想这个问题应该解决了,对吧?这不是一个问题,很长一段时间都没有出现过,因为节点串行端口在电子设备上工作正常。
主要的问题是,电子,每个人谁开始使用电子将有问题的原生模块,在这个线程的大多数问题是关于让原生模块的工作。
...然后问题就结束了。
ar7v8xwq2#
正确的解决方案:
在Webpack配置中指定:
有关详细信息,请参阅webpack externals config
结果包中将不包括串行端口包!
之所以会发生此问题,是因为serialport软件包包含与brawsers(默认webpack目标)webpack targets docs不兼容本地插件
过期
我想,这是不可能做直接,但对我来说,工作的方式:
1.首先,可以创建具有所需所有串行端口逻辑类
1.通过任何方便你的方法(我通过commonJS模块)将它导入你的main.js文件(电子主进程文件)
1.在主进程中创建串行端口类的示例,并将其分配给全局对象(
global.serialport = new yourSerialPort()
)1.然后,在渲染器进程文件中键入:
1.如果你使用webpack,你必须在webpack.config.js中为你的渲染器进程添加下一行:
编辑:6.如果你想使用主电子过程的webpack,你应该在主过程的webpack配置中键入next:
(source-map是可选的)
我甚至认为,如果在webpack配置中标记它的外部依赖性,你可以从渲染器进程中要求串行端口,在我描述的方式上
都是...
现在你可以在你的电子应用程序的渲染端使用串行端口了