通過node-webkit實現用用HTML5+JS開發跨平臺的桌面應用

jopen 11年前發布 | 77K 次閱讀 前端技術 node-webkit

一、node-webkit是什么?

二、node-webkit有些什么干貨?

三、node-webkit的基本工作原理是怎樣的?

四、怎樣用node-webkit進行客戶端開發?

五、如何做到開發一份代碼,生成多平臺APP?

六、使用node-webkit開發桌面客戶端的優缺點?

七、Q & A!

一、node-webkit是什么?

1、概念

    基于node.js和chromium的應用程序實時運行環境,可運行通過HTML(5)、CSS(3)、Javascript來編寫的本地應用程序。 node.js和webkit的結合體,webkit提供DOM操作,node.js提供本地化操作;且將二者的context完全整合,可在HTML代 碼中直接使用node.js的API。

2、獲取node-webkit

    官網:https://github.com/rogerwang/node-webkit

    支持的平臺:Windows 32bit,Linux 32/64bit,Mac 32bit(OS X 10.7+)

    選擇與平臺相對應的版本,下載并安裝即可。

二、node-webkit有些什么干貨?

    官方提供的一些成品:https://github.com/rogerwang/node-webkit/wiki/List-of-apps-and-companies-using-node-webkit

   

三、node-webkit的基本工作原理是怎樣的?

    webkit提供DOM操作,包括HTML解析、CSS渲染、Javascript解釋執行、DOM事件處理等。而node.js則提供一些本地化的操作、服務器端的處理等。二者的上下文完全融合,實現一個較為完美的本地應用環境。

四、怎樣用node-webkit進行客戶端開發?

1、一個node-webkit項目的基本目錄結構

   

    上面這是一個簡單nw應用的目錄結構,如果nw應用中需要用到額外的node_module,可以在目錄結構中增加一個node_modules的目錄,以存放APP所需的node插件。

    其實,一個最最簡單的nw應用,只需要有mail.html和package.json文件即可,如下:

   

2、認識package.json

    “Every app package should contain a manifest file named package.json, it will tell node-webkit how to open the app and control how the browser behaves. ”    

     package.json格式如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15
</td>

{

     "main" : "main.html" ,                              /* APP的主入口,文件名任意;必選 */

     "name" : "nw-demo" ,                                /* APP的名稱,必須具備唯一性,且符合正常變量命名;必選 */

     "description" : "demo app of node-webkit" ,         /* APP的簡單描述 */

     "version" : "0.1.0" ,                               /* APP的版本號 */

     "keywords" : [ "demo" , "node-webkit" ],            /* APP的關鍵字,搜索APP時用到 */

     "window" : {                                       /* APP的窗口屬性 */

         "icon" : "link.png" ,                           /* APP圖標(windows下,狀態欄上可見) */

         "toolbar" : true ,                              /* 是否顯示工具欄 */

         "width" : 800,                                 /* 窗口初始化大小 */

         "height" : 500,

         "frame" : true                                 /* 是否顯示外窗體,如最大化、最小化、關閉按鈕 */

     },

     "user-agent" : "%name %ver %nwver %webkit_ver %osinfo" /* 可自定義APP的UA */

}
</div> </td> </tr> </tbody> </table> </div> </div>

    其中,main和name是必選字段,更多配置字段,可參考官方地址:https://github.com/rogerwang/node-webkit/wiki/Manifest-Format

3、主窗口mail.html的寫法

    隨意寫,和普通的前端頁面開發方式一樣!

4、最簡單的HelloWorld

a)、目錄結構

   

b)、package.json文件代碼

   

c)、main.html文件代碼

   

d)、執行命令,運行

   

e)、最終效果

   

    也許你會覺得這個界面特別熟悉,沒錯,它就是chromium!只是在node-webkit中,我們可以通過修改package.json配置,把工具欄和外框去掉,修改后的配置為:

   

    去掉外框后的運行效果:

   

    你一定會發現去掉toolbar和frame以后,窗口沒法被拖動了,其實,可以通過下面這句css來實現窗口可拖動:

   

五、如何做到開發一份代碼,生成多平臺APP?

1、nw包制作

   

    完成上面的操作,已經生成了一個名為hello-world.nw的文件,如果本機已經安裝過node-webkit,雙擊該文件即可運行。但是,針對未安裝過node-webkit的用戶,還需要將此nw的運行環境也打包在一起,并生成通用可執行文件,Mac上*.app,Windows上*.exe。

2、針對Mac OS X,*.app文件制作

a)、app.icns文件制作

    為你的App制作特定圖標,可準備一張1024*1024的png圖片,利用icns-Tool工具生成app.icns圖標文件。

b)、修改Info.plist文件

    為你的App制作或修改特定的描述文件。

c)、打包*.app

    從官網再次下載node-webkit的Mac版,命令行執行:

  • 1

    2

    3

    4

    5
    </td>

    mv hello-world.nw app.nw

    cp app.nw node-webkit.app /Contents/Resources/

    cp app.icns node-webkit.app /Contents/Resources/

    cp Info.plist node-webkit.app /Contents/

    mv node-webkit.app hello-wrold.app
    </div> </td> </tr> </tbody> </table> </div> </div>

        至此,Mac OS X版本的可執行程序hello-world.app制作完成。

        一般情況下,都會將其壓縮后再進行傳播。

    3)、針對Windows,*.exe文件制作

        windows版本的exe程序制作非常容易,從官網下載node-webkit.exe,cmd下執行:

    1
    </td>

    copy /b node-webkit.exe+app.exe hello-world.exe
    </div> </td> </tr> </tbody> </table> </div> </div>

          在Linux環境下,可以使用如下命令:

  • 1
    </td>

    cat node-webkit.exe app.exe > hello-world.exe
    </div> </td> </tr> </tbody> </table> </div> </div>

          至此,Windows版本的hello-world.exe程序制作完成。

    4)、將繁瑣重復的操作整合到一個build.sh腳本中

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43
    </td>

    #! sh

    app_name= "system-info"

      

    # 創建app.nw文件

    rm -rf output

    cd ../ && rm -rf output && mkdir output

    cp -r $app_name/* output

    rm -rf output /Info .plist output /build .sh output /app .icns

    cd output/

    find . - type d -name ".svn" | xargs rm -rf

    zip -r .. /app .nw * > /dev/null ;

    rm -rf * && cd ../ && mv app.nw output/

    mv output $app_name/ && cd $app_name

    echo "create nw file success!"

      

    #下載基礎包

    svn co svn: //localhost/node-webkit-base output > /dev/null

      

    #創建mac版本app

    cd output

    unzip mac-os-x.zip -d mac-os-x > /dev/null

    rm -rf mac-os-x.zip mac-os-x /nwsnapshot

    if [ -f .. /Info .plist ]; then

         cp .. /Info .plist mac-os-x /node-webkit .app /Contents/

    fi

    cp app.nw mac-os-x /node-webkit .app /Contents/Resources/

    if [ -f .. /app .icns ]; then

         cp .. /app .icns mac-os-x /node-webkit .app /Contents/Resources/

    fi

    mv mac-os-x /node-webkit .app mac-os-x/$app_name.app

    echo "create mac os app success!"

      

    #創建windows版本app

    unzip win-32.zip -d win-32 > /dev/null

    rm -rf win-32.zip win-32 /nwsnapshot

    cp app.nw win-32/ && cd win-32

    cat nw.exe app.nw > $app_name.exe

    rm -rf nw.exe nwsnapshot.exe

    cd ..

    echo "create windows app success!"

      

    #刪除app.nw

    rm -f app.nw
    </div> </td> </tr> </tbody> </table> </div> </div>

    六、使用node-webkit開發桌面客戶端的優缺點?

    1、優點

    • 提高UI開發效率,DOM中豐富的事件等可以涵蓋絕大多數桌面開發中的情況

      </li>

    • HTML(5)與CSS(3)擁有豐富的展現效果,可以更容易地對界面進行改版、換膚

      </li>

    • 容易實現跨平臺:Mac OS X 、Windows、Linux

      </li>

    • 使用Web開發人員工具可以使 UI 調試變得很輕松

      </li>

    • 桌面程序UI與Web版UI可以共享代碼

      </li> </ul>

      2)、缺點

      • 瀏覽器原生API幾乎僅僅局限在Web頁面上

        </li>

      • 若通過JavaScript引擎向Web前端暴露一些具有操作客戶端權限的API,如何保證代碼安全性

        </li>

      • 必須攜帶瀏覽器內核運行庫,無形增加程序體積,至少20MB以上(壓縮后)

        </li>

      • 能否滿足各種復雜怪異的需求,比如異型窗口 

        </li> </ul> 來自:http://www.baidufe.com/item/1fd388d6246c29c1368c.html

     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
  • sesese色