是騾子是馬總要拉出來溜溜才知道,是吧。java
查了一下,目前用Nodejs開發桌面應用,主要有兩種方案node
1.Electronpython
Electron是一款利用Web技術開發跨平臺桌面應用的框架。項目地址是:https://github.com/atom/electronlinux
2.NW.jsgit
NW.js是Intel的工程師寫的一個基於node.js和chromium的應用程序運行環境。項目地址是:https://github.com/rogerwang/node-webkitgithub
1、NW.js的下載
官網地址是:http://nwjs.io/web
進去以後,點擊下載SDK的版本,並解壓至本地目錄便可。shell
這裏遇到一個鬱悶的事,從官網上下載的0.30版本的zip包,怎麼都打不開,提示壓縮包有錯誤。json
使用7zip也不行
仍是從官網下載的,真是服了。下載了10幾回都不行。。
只能從其餘網站下載了一個0.23的包使用。
0.23版本的sdk下載
https://download.csdn.net/download/zhupengfei/10366176
0.30版本的運行時下載
https://download.csdn.net/download/zhupengfei/10366181
2、應用編寫
1.在nw.exe目錄中建立一個helloworld的文件夾。
新建index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Hello zhupengfei!</title> <script src="helloworld.js"></script> </head> <body> </body> </html>
document.write('Hello, World!');
新建package.json
{ //應用的入口頁面(也能夠設置成js文件) "main": "index.html", //應用的名稱 "name": "HelloWorld" }
2. 運行helloworld。
a) 在nw.exe所在目錄按下shift+鼠標右鍵,選擇"在此處打開命令窗口"。而後輸入nw helloworld便可看到運行效果。注意建議使用cmd,不要使用powershell。我使用powershell必須使用./nw 才能夠。
b) 能夠直接將helloworld目錄拖拽到nw.exe上一樣也能夠運行。
3、應用打包
通常windows的桌面應用都是exe可執行文件,是不依賴於其餘文件和環境的。而咱們建立的helloworld應用是依賴於nw.exe和相關文件的,那麼如何將應用打包成一個可執行文件呢?
通過google,果真是有解決方案的,那就是Enigma Virtual Box
1. 下載Enigma Virtual Box
地址是:http://enigmaprotector.com/en/downloads.html
選擇最後一個下載就能夠了,而後安裝。
2. 將應用打包成helloworld.nw文件。
進入到helloworld目錄中,全選三個文件打包成zip,而後更名成helloworld.nw。
(有一個坑,這裏從網上看了說用WINRAR壓縮成ZIP不行,必須用7-zip,因此這裏直接經過。
3. 合併helloworld.nw和nw.exe
將helloworld.nw文件移動到和nw.exe同級目錄下,而後執行命令,注意nw.exe必須在前面,不要弄反了,hello.exe運行會出錯
copy /b nw.exe+helloworld.nw hello.exe
發現多了一個hello.exe文件,雙擊發現是能夠運行的。不過這還不是最終的結果,由於將hello.exe移動到其餘文件夾以後,就不能正常執行了。
4. 使用Enigma Virtual Box打包成exe,安裝後能夠語言中選擇中文顯示。
Input File Name選擇剛纔生成的hello,Output File Name就是輸出文件。
除了剛纔合併的hello.exe文件,其餘全部文件都須要添加進來,有一個快速的方法就是直接將所需的文件和文件夾,直接拖進來。
肯定
而後點擊右下角的"執行封包"按鈕,
打包之後文件太大了,144M啊。我暈,這才只是個demo啊。
看到上圖結果,就說明執行成功了。
找到打包後的文件,而後執行。
4、加密
加密必須使用SDK包,開始下載的是運行時包,不知道,後來下載了SDK包,才發現裏面有nwjc.
增長加密字符串,又方便確認是否加密成功。
執行如下命令,將JS文件加密爲bin文件
$ cd helloworld
$ ../nwjc.exe helloworld.js helloworld.bin
多了兩個文件。
內容確實輸出了。
而後按照上面相同的步驟,壓縮zip修改成nw,而後合併,處理等等。
我的總結:
我的感受二者都差很少吧,昨天用Electron作了一個demo,效果出來了。還不錯。今天用Nwjs試一下。
爲何還要用Nwjs呢,緣由是Electron目前沒法支持代碼保護,能夠asar壓縮,可是能夠解壓。作桌面應用多數仍是商業項目,因此代碼保護我認爲是必須的。
昨天晚上看Electron的github裏吵了半天,最後的結論是eclectron沒有計劃在項目中增長代碼保護功能,緣由是他們認爲多數人用不到。
因此我以爲作桌面應用仍是選用傳統的.net java C++等吧,像nodejs python說是全棧,其實最多仍是能作桌面應用,真是要商用,仍是差一些,最好慎重選擇。
2018-4-24看到朋友的熱情回覆,這裏補充一下
使用nodejs開發客戶端,仍是用c#,解決方案自己沒有對與錯,要看具體的需求,適合需求的方案都是對的,好的,同時這個對和好也不是長久的,隨着技術的進度,未來可能就不合適了。
說兩個使用場景
一、若是咱們要開發一個雲網盤的客戶端。那用Nodejs開發應該是合適的,一次開發,能夠適合於不一樣的客戶端,windows,linux都適用。
或者採用微信的客戶端的方式,用cef瀏覽器客戶端開發,這樣,網頁版,PC版都統一了。
二、若是咱們要開發一個商業的收銀系統,支持讀會員卡,打印小票,可能還要讀身份證,指紋儀設備等,c#有多年的經驗,一些設備廠商也都提供的有相應語言的demo。若是用nodejs開發,可能要費點功夫了。
並且作商業軟件,系統得穩定吧,對我而言,我確定會選擇c#開發。
或許幾年後,nodejs桌面開發慢慢成熟,對接外設已經有大量的產品,那時候說不定我會選擇nodejs呢。
------------------------------------------------------------
遇到問題能夠微信聯繫我哦
或者支付寶聯繫我