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配置以及都須要全局安裝哪些庫:

新手入門,會遇到各類各樣的問題,但最終總有解決的辦法。

相關文章
相關標籤/搜索