這個坑是沉痛的,由于陷入之前的處理問題的慣性操作而浪費了三天時間,四個深夜凌晨2點。特此記錄一下。
先來說說問題
項目用戶端使用到nw.js來構(gòu)建跨平臺桌面應(yīng)用程序,其中涉及到熱敏票據(jù)的打印。對于這種比較冷門的工具來說,網(wǎng)上各種支持真的是有限。對于打印功能,各種尋找之后,發(fā)現(xiàn)只有一個node-printer是相對有點資料可用,看到這些資料之后,就開始入坑了。
一號坑
關(guān)于這個node-printer的使用相關(guān)文章,都是一些很老的文章,而且非常少。找到的一些內(nèi)容也是千篇一律。最后總結(jié)就是,按照百度出來的文章操作,基本不可能編譯成功。
二號坑
這個坑是node-printer的坑。這個庫在GitHub上是有一直更新,但NIMA在npmjs上,它上傳的并不是最新版本,而是三年前的版本。所以導(dǎo)致直接使用npm install printer下載下來的版本一直就是老版本。如果需要用到最新版本必須使用
npm install git+https://github.com/thiagoelg/node-printer.git
三號坑
這個就是自己思維慣性的坑了。
由于這些文檔都是英文的,也不是看不懂,而是看起來費勁,所以就想著走走捷徑。照著百度上面說的各種錯誤解決方案就是一通騷操作,最后結(jié)果證明,對于熱門的工具,你可以相信百度。但是對于這種冷門的東西,那就只能參考了,這是血的教訓(xùn)。
最后上硬菜
在nw.js要如何優(yōu)雅的使用node-printer
一、首先你必須要先看一個nw.js官方的文檔Use Native Node Modules。
如果沒有回過頭來認(rèn)真看著這個nw.js文檔,這會我估計還在抓耳撓腮想著如何解決問題。這個文檔告訴了我們?nèi)绾卧趎w.js使用原生node模塊。這個文檔開頭就給我們指出的了操作方法。

如果我們在最新版本的nw.js中編譯node的原生模塊,那么我們要保證nw.js運行環(huán)境的node版本需要和我們開發(fā)環(huán)境的node版本保持一致。比如我們查看我們nw.js的環(huán)境信息如下

圖中顯示當(dāng)前nw.js環(huán)境的node版本為13.1.0。所以就得保證本機開發(fā)環(huán)境的node版本也是這個。
二、本機需要有Visual C++ Build Tools環(huán)境
如果你的開發(fā)電腦有安裝過Visual Studio那就可以跳過這一步,如果沒有那就需要安裝。建議使用windows-build-tools來安裝這個環(huán)境。
npm install --global windows-build-tools --vs2015
這個預(yù)計會比較耗時,網(wǎng)絡(luò)不好的情況可能還需多嘗試幾次。
三、安裝node-printer
npm install git+https://github.com/thiagoelg/node-printer.git
四、安裝node-gyp
npm install --global node-gyp
五、nw.js文檔中提到的如何hack node-gyp

最后一步
進入cmd執(zhí)行
項目路徑\node_modules\printer>node-gyp rebuild
出現(xiàn)如下輸出標(biāo)識編譯成功

Test
在nw項目的頁面中編寫代碼
<script>
var printer = nw.require("printer");
console.log(printer);
</script>
啟動nw程序F12打開devtool,看到如下輸出表示node-printer編譯成功

Tips:
nw需要下載sdk版本才有devtools,否則f12打開是空白。