由於項目的要求,需要用到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配置以及都需要全局安裝哪些庫:
新手入門,會遇到各種各樣的問題,但最終總有解決的辦法。