step1:在node@14.2.0版本执行 sudo npm install serialport --unsafe-perm --build-from-source 会报错,提示node版本太低,需要16以上版本
step2:在node@16.18.1版本执行 sudo npm install serialport --unsafe-perm --build-from-source 可以安装成功,但是执行npm run electron:serve时 会提示无法解析Module parse failed
step3:16.18.1。网上博主说Module parse failed 一般是版本过高导致的,node_modules中的模块一般是可以直接用的。因此尝试降低serialport版本到10.0.0(之前是serialport@12.0.0)sudo npm install serialport@10.0.0 --unsafe-perm --build-from-source,安装之后发现@serialport中的文件都是.js文件,之前是ts。执行npm run electron:serve报错提示node_modules/bindings/bindings.js中的Cannot read properties of undefined ,猜测是不是开发环境无法操作,打包生产版本测试
step4:生产版本安装之后无法运行,依旧回到开发版中,网上提示step3中的报错原因可能是因为webpack无法解析二进制文件,需要再vue.config.js中把serilport排除【在windows中也有这一步,只是在linux中开发时我注释掉了】,于是打开排除serialport中的注释代码,再次重启成功执行
step5:重新执行npm run electron:serve程序可成功执行,也可列出所有串口,但是又出现了一个新的问题permission denied cannot open tty/usb0。根据网友的提示,此错误的出现是当前用户的权限不够,在执行sudo chmod 777 /dev/tty*把当前用户加入到root权限组并重启系统之后,成功读写到数据
step6:测试第一种型号的读写板,识别的串口号是“ttyUSB0”可以使用。第二种型号的读写板,识别的端口号是“ttyCH341USB0”,使用searialport.list()列出串口中只有ttys开头的,并没有“ttyCH341USB0”。
step7:在网上翻遍各种解决方案,比如重装驱动,查看官方文档都没有找到问题。最后在翻看源码的时候,发现源代码中的Serialport.list()在列出串口的时候进行了过滤,并没有列出CH开头的串口,于是手动加上之后再次尝试发现已经可以读取到此串口了。
step8:由于linux中我使用的node版本为16.18.1,electron@22,serialport@10.0.0,而windows的版本是node14.2.0 32位,electron@13.0.0,serialport@9.2.1,因此想将windows中版本升级成和linux中的版本保持一致,以免维护多套代码。此时,我比较担心的是,serialport10.0.0的版本是否支持windows7的32位操作系统,因为网友说最后支持win7的node版本为13,我开始怀疑现在客户使用的windows版本(searialport@9.2.1,node@14.2.0)是否支持window7,于是下载安装了win7 32位的虚拟机并且安装了现有的windows版本的软件,发现软件可以正常运行,读写板也可以正常的读写数据。
step9:为了保持linux和windows的软件版本一直,我决定升级windows的软件依赖环境,首先使用nvm安装了32位的node@16.18.1,然后清除node缓存,并删除C盘user用户下的.npmrc文件,之后执行npm install安装依赖,此时serialport也成功安装,但由于是未经编译过得版本,所以我删除了@serialport安装包,并执行sudo npm install serialport@10.0.0 --unsafe-perm --build-from-source命令,此时提示我python版本不一致,需要的是>=3.6的版本,而我本地的版本确实2.75,因为之前安装serialport的时候,网上都提示说不能使用python3.0以上的版本,所以此时的我还是相信着之前的经验,不断找寻其他的解决方案,但是无论任何方案都提示我必须要python3.6及以上的版本,于是我安装提示在安装了python3.6版本(路径为C:\Users\13720\AppData\Local\Programs\Python\Python36)并设置了系统变量,之后再次执行命令,果然成功安装serialport。之后又在win7虚拟机上测试了node@16.18.1和serialport@10.0.0打包的软件,发现可以成功读写。可见网友所说最后支持win7的node版本是13.0的应该指的是开发环境,使用高版本的node在其他windows环境中开发的软件在win7上面还是可以使用的。