之前一直用.net開發桌面應用,最近由於公司需要轉為nodejs,但也是一直用nodejs開發后台應用,網站,接口等。近期,需要開發一個客戶端,想着既然nodejs號稱全棧,就試一下開發桌面應用到底行不行。
是騾子是馬總要拉出來溜溜才知道,是吧。
查了一下,目前用Nodejs開發桌面應用,主要有兩種方案
1.Electron
Electron是一款利用Web技術開發跨平台桌面應用的框架。項目地址是:https://github.com/atom/electron
2.NW.js
NW.js是Intel的工程師寫的一個基於node.js和chromium的應用程序運行環境。項目地址是:https://github.com/rogerwang/node-webkit
一、NW.js的下載
官網地址是:http://nwjs.io/
進去之后,點擊下載SDK的版本,並解壓至本地目錄即可。
這里遇到一個郁悶的事,從官網上下載的0.30版本的zip包,怎么都打不開,提示壓縮包有錯誤。
使用7zip也不行
還是從官網下載的,真是服了。下載了10幾次都不行。。
只能從其他網站下載了一個0.23的包使用。
0.23版本的sdk下載
https://download.csdn.net/download/zhupengfei/10366176
0.30版本的運行時下載
https://download.csdn.net/download/zhupengfei/10366181
二、應用編寫
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上同樣也可以運行。
三、應用打包
一般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啊。
看到上圖結果,就說明執行成功了。
找到打包后的文件,然后執行。
四、加密
加密必須使用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#,解決方案本身沒有對與錯,要看具體的需求,適合需求的方案都是對的,好的,同時這個對和好也不是長久的,隨着技術的進度,將來可能就不合適了。
說兩個使用場景
1、如果我們要開發一個雲網盤的客戶端。那用Nodejs開發應該是合適的,一次開發,可以適合於不同的客戶端,windows,linux都適用。
或者采用微信的客戶端的方式,用cef瀏覽器客戶端開發,這樣,網頁版,PC版都統一了。
2、如果我們要開發一個商業的收銀系統,支持讀會員卡,打印小票,可能還要讀身份證,指紋儀設備等,c#有多年的經驗,一些設備廠商也都提供的有相應語言的demo。如果用nodejs開發,可能要費點功夫了。
而且做商業軟件,系統得穩定吧,對我而言,我肯定會選擇c#開發。
或許幾年后,nodejs桌面開發慢慢成熟,對接外設已經有大量的產品,那時候說不定我會選擇nodejs呢。
------------------------------------------------------------
遇到問題可以微信聯系我哦
或者支付寶聯系我