Electron打包Node程序:NODE_MODULE_VERSION值不一致引发的问题。(1)

由于项目的要求,需要用到Electron+Node。Electron确实有很多坑,刚接触的时候,遇到了各种各样的问题,不过最终都一一解决了。

一些常见的问题,网上都有相应的资料,这里就不介绍了。

 首先看一张图,介绍Electron、Node使用不同的Chrome内核:

 

由于chrome内核不同,需要编译成一致的,才能让node程序运行在Electron上,而网上推荐的最常用的编译工具为electron-rebuild,在使用Node-Serialport读取本机串口的时,使用"./node_modules/.bin/electron-rebuild.cmd"编译之后,就能解决问题。

 

但是在使用node-ffi读取dll时,遇到了以下的问题,本篇文章将围绕这个问题探讨以下解决方案:

NODE_MODULE_VERSION指的是Node.js的ABI(application binary interface)版本号,用来确定编译Node.js的C++库版本,以确定是否可以直接加载而不需重新编译。在早期版本中其作为一位十六进制来储存,而现在表示为一个整数。

 

查看Electron版本文档库中,发现有这么一句话:Change the NODE_MODULE_VERSION to 69

问题原因终于找到了,但是怎么解决?问题分析到这种程度,可以得出两种解决方案:

1) 选取Node版本与Electron版本的NODE_MODULE_VERSION一致。(由于没有找到electron各个版本对应的NODE_MODULE_VERSION,这里可以稍后研究一下)

2)依据electron-rebuild的思路,把二者转换成一致。在rebuild的时候,指定一下abi的值不就可以了?查了一下这方面的资料,发现才真能指定abi的值。

      "rebuild": "cnpm rebuild --runtime=electron --target=4.0.5 --disturl=https://atom.io/download/atom-shell --abi=69"

      运行成功。同时解决了Node-Serialport串口读取,也能解决Node-ffi读取dll。

 

像需要python2.7x、vc++、.net  framework2.0等的配置就不啰嗦了,查一下资料即可,最后附带一张package.json配置以及都需要全局安装哪些库:

新手入门,会遇到各种各样的问题,但最终总有解决的办法。

 

posted @ 2019-02-22 13:50  莫道  阅读(13118)  评论(3编辑  收藏  举报