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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM