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

因为项目的要求,须要用到Electron+Node。Electron确实有不少坑,刚接触的时候,遇到了各类各样的问题,不过最终都一一解决了。node

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

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

 

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

 

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

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

 

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

问题缘由终于找到了,可是怎么解决?问题分析到这种程度,能够得出两种解决方案:app

1) 选取Node版本与Electron版本的NODE_MODULE_VERSION一致。(因为没有找到electron各个版本对应的NODE_MODULE_VERSION,这里能够稍后研究一下)python2.7

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

      "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配置以及都须要全局安装哪些库:

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

相关文章
相关标签/搜索