electron 打包把node代理服务打包进去_专题:让C++给node做技术加持(三)编译electron本地模块踩坑记
歡迎來到我的專題文章:《讓C++給node做技術(shù)加持》系列。更多內(nèi)容,持續(xù)更新中,歡迎關(guān)注。
往期目錄:
專題:讓C++給node做技術(shù)加持(一)環(huán)境搭建,項(xiàng)目運(yùn)行
專題:讓C++給node做技術(shù)加持(二)-NodeJs調(diào)用C++方法
上一章節(jié),我介紹了NodeJs如何與C++進(jìn)行交互的環(huán)境搭建,C++為nodejs提供API,成功實(shí)現(xiàn)了雙方 的交互。具體細(xì)節(jié)可移步到第二章節(jié)。
NodeJs應(yīng)用場(chǎng)景
在前端領(lǐng)域,nodejs被應(yīng)用最廣泛的,無非是網(wǎng)站后臺(tái)。這個(gè)時(shí)候我們把打包好的.node二進(jìn)制文件部署到服務(wù)器即可。
然后隨著nodejs不斷發(fā)展,桌面端開發(fā)也是異常火熱。前端圈中以electron為首的桌面應(yīng)用框架也是琳瑯滿目。
既然是桌面開發(fā),那肯定有調(diào)用操作系統(tǒng)底層的API能力,比如操作數(shù)據(jù)庫,文件讀寫等,肯定也少了不nodejs支持。
好,前面我們既然能將C++編譯好的.node文件給nodejs調(diào)用,那是否可以無縫移植到electron項(xiàng)目中來呢?
恩。動(dòng)手試試就知道了。
首先我們來創(chuàng)建一個(gè)electron快速啟動(dòng)的項(xiàng)目,這里就不做演示了,我自己已經(jīng)創(chuàng)建好了
創(chuàng)建了一個(gè)800*600的空窗口,這不是重點(diǎn)
接下來我們?cè)陧?xiàng)目根目錄下引入我們通過node-gyp rebuild打包好的.node二進(jìn)制文件
接下來我們來啟動(dòng)下electron,看效果
哦豁,好像啟動(dòng)失敗了
//看下面的錯(cuò)誤信息,說的好像是版本沒匹配對(duì)。NODE_MODULE_VERSION 64. This version of Node.js requiresNODE_MODULE_VERSION 76. Please try re-compiling or re-installing的確是這樣的哈,我們的electron中的nodejs使用的v8和普通的nodejs的v8還不太一樣,導(dǎo)致正常編譯下的.node文件不能被electron使用。
解決問題
接著我們肯定要開始著手解決這個(gè)問題了,通過查閱資料,發(fā)現(xiàn)在我們?cè)诰幾gC++時(shí)針對(duì)electron有自己獨(dú)立的參數(shù)。
好了,直接上編譯參數(shù)了。
node-gyp rebuild --target=8.2.2 --dist-url=https://atom.io/download/electron--target表示我當(dāng)前electron的版本為8.2.2 --dist-url表示我們要這個(gè)地址下載對(duì)應(yīng)的頭文件,這個(gè)過程一般很難執(zhí)行下來。我也是嘗試了很多次才搞好的。 我們接下來看下編譯過程。
呀!好像翻車了。。
別著急,遇到問題,我們先來看下錯(cuò)誤提示。
'MaybeLocal<:string>' to 'v8::Local<:string> &&' for 1st argument意思就是我們不能像之前這樣
Local val = String::NewFromUtf8(isolate,str.c_str()); args.GetReturnValue().Set(val);直接通過Local去接收返回值了,得替換成MaybeLocal<:string>這種數(shù)據(jù)類型。
好吧,按照提示來唄。
但是我發(fā)現(xiàn),MaybeLocal這種類型是不能直接返回到NodeJs那邊去的。Nodejs那邊能接受的類型都是通過Local來定義的。
那怎么樣?沒辦法,只有硬著頭皮翻下v8的文檔了。我找啊找,找啊找,終于,我找到了這個(gè)文檔,
好像看到了希望啊。MabelLocal有一個(gè)方法ToLocalChecked();可以一試了。
好了,我的編譯終于成功了。我們copy下.node文件到electron項(xiàng)目中,接著啟動(dòng)下項(xiàng)目
終于成功調(diào)用啦。。。
到這,坑算是填好了。
總結(jié)
下期,柳暗花明,以N-AP模式基于C++開發(fā)nodejs模塊的春天要來了。
這里是 暢哥聊技術(shù) 《讓C++給node做技術(shù)加持》專題系列文章,更多內(nèi)容,持續(xù)更新中,歡迎關(guān)注。
全文完。
總結(jié)
以上是生活随笔為你收集整理的electron 打包把node代理服务打包进去_专题:让C++给node做技术加持(三)编译electron本地模块踩坑记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的特长是计算机VF编程,2016计算机
- 下一篇: ue4集合类型_UE4-Sockets