使用Nwjs開發桌面應用體驗
https://www.cnblogs.com/zhupengfei/p/8906131.html
之前一直用.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>
按新建helloworld.js
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說是全棧,其實最多還是能做桌面應用,真是要商用,還是差一些,最好慎重選擇。