3、終于在electron中成功編譯node-serialport了

閑言碎語

??

electron是一個使用Js來做桌面應用的的玩意,大名鼎鼎的vs code就是用這貨做出來的。

node-serialport是一個可以用來訪問電腦上串口的node.js包

Node.js package to access serial ports for reading and writing. Welcome your robotic JavaScript overlords. Better yet, program them!

作為一個只會C語言的渣渣,為了在electron上使用node-serialport折騰了我好一段時間??。主要原因是node-serialport是一個原生庫,使用的時候需要編譯。而electron有自身的node.js環境,原生庫在上面運行之前需要重新編譯。這個編譯過程會從網上下載一堆依賴,也就是因為網絡原因這個過程總會失敗。。。。。。

就在寫這篇文章的今天,無意間百度到了解決方法??。之前一直用 electron serialport這樣的關鍵詞,今天不知道那個抽了哪個筋,改用關鍵詞 electron 原生模塊 找到了這篇文章,里面提到了使用淘寶代理。cnpm我知道,但是萬萬沒想到淘寶代理也有electron的鏡像??。

怎么做

本文假設你已經能使用node-serialport了,沒有的話,還請移步這里。使用這個模塊的時候十有八九需要重新編譯的,因此需要安裝node-pre-gyp,如果是Windows用戶,可以看這里node-gyp installation。這個環境也有的折騰的。不是本文的重點,不提太多??。

node-pre-gyp建議采用全局安裝,這樣可以在cmd上面使用。

另外,好像npm上面的serialport有點問題,建議到GitHub上下載個源碼在本地安裝。

cnpm install electron --save-dev

當然可以使用cnpm install electron@1.6.2 --save-dev來指定版本,這里使用了1.6.2這個版本的electron。

安裝本地的node-serialport包需要使用npm,npm install node-serialport本地路徑

安裝完之后,大頭的工作才開始,如果順利的話可以一次通過。先將目錄定位到node-serialport。可以使用命令行cd .\\node_modules\\serialport\\
然后在使用這條命令行來編譯
node-pre-gyp rebuild --target=1.6.2 --arch=x64 --target_arch=x64 --dist-url=https://npm.taobao.org/mirrors/atom-shell

最近在使用electron的時候,發現不用淘寶鏡像也可以成功,建議先試一下這個,不行再換淘寶的。
node-pre-gyp rebuild --target=1.6.2 --arch=x64 --target_arch=x64 --dist-url=https://atom.io/download/electron

其中 --target=1.6.2用來指定electron的版本,--arch用兩種選擇ia32或者x64,--dist-url指定下載頭。

強調

為了保證可以成功,先保證可以在node.js上面成功使用node-serialport!!!

這里提到了node-pre-gyp和node-gyp,兩者什么區別我也不清楚。在Windows下編譯原生庫好像需要vs的一些東西,由于我的電腦上先前安裝了vs2015。我只安裝了node-pre-gyp和py2.7(py3不支持,只能用2.7),然后就可以成功編譯和使用node-serialport。

這這個過程如果報錯了,看看是不是有什么404。如果有十有八九是網絡問題??。

最后一步

如果你順利的話,就來到了最后一步。激動人心的一步。

暫時沒有用GitHub,只能貼代碼了。

下面是package.json的內容

{
  "name": "electron_serialport",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "preinstall": "npm install .\\node-serialport-master",
    "postinstall": "cd .\\node_modules\\serialport\\ && node-pre-gyp rebuild --target=1.6.2 --arch=x64 --target_arch=x64 --dist-url=https://npm.taobao.org/mirrors/atom-shell" 
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "electron": "^1.6.2"
  }
}

這里使用了腳本,可以使用npm install來安裝需要的包并編譯serialport包。請到GitHub上下載node-serialport-master并解壓到工程文件夾下面。

接著是index.js的內容

const {app, BrowserWindow, dialog} = require('electron')

const path = require('path')
const url = require('url')

let win;

app.on('ready', () => {
    
    win = new BrowserWindow()

    win.on('close', () => {
        win = null;
    })

    win.loadURL(url.format({
        pathname: path.join(__dirname, 'index.html'),
        protocol: 'file',
        slashes: true
    }))

    win.webContents.openDevTools();
})

app.on('window-all-closed', ()=> {
    app.quit();
})

然后是count.js的內容,serialport有關的代碼就在這里。

const Serialport = require('serialport');

Serialport.list((err, ports) => {
    ports.forEach((port) => {
        console.log(port.comName);
    });
});


let cnt = 0;

setInterval(() => {
    document.getElementById('cnt').textContent = cnt;
    cnt++;
}, 1000)

最后是index.html

<!doctype html>
<html>
    <head>
        <title>electron</title>
    </head>
    <body>
        <h1>
            Hello electron!
        </h1>

        <div id = "cnt"></div>
    </body>
    <script>require('./count.js')</script>
</html>

這個項目的目錄結構是這樣的,


目錄結構

好運!!!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容