NW.JS 客户端开发入坑指南

基础概述

NW.js 是基于 ChromiumNode.js 运行的, 以前也叫nodeWebkit。这就给了你使用HTML和JavaScript来制作桌面应用的可能。在应用里你可以直接调用Node.js的各种api以及现有的第三方包。因为Chromium和 Node.js 的跨平台,那么你的应用也是可以跨平台的。

Getting Started

1、安装对应的模块包:

cnpm install nw nw-builder -S

2、初始化项目目录结构

- package.json
- src
	-- package.json
	-- views
		-- main.html
	-- assets
- dist

3、初始化配置package.jsonscripts命令

{
  "name": "nw_js",
  "version": "1.0.0",
  "description": "* initialize npm project contain package.json",
  "main": "index.js",
  "scripts": {
    "dev": "nw src/",
    "build": "nwbuild --platforms win32,win64,osx64,linux32,linux64 --buildDir dist/ src/"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "nw": "^0.44.1-sdk",
    "nw-builder": "^3.5.7"
  }
}

4、初始化窗口属性配置src/package.json

{
  "name": "src",
  "version": "1.0.0",
  "description": "",
  "main": "views/main.html",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "window": {
    "title": "damiao-classroom demo",
    "icon": "assets/icons8-apple-logo-64.png",
    "toolbar": true,
    "frame": true,
    "resizable": false,
    "width": 800,
    "height": 600,
    "position": "mouse",
    "min_width": 400,
    "min_height": 200,
    "max_width": 800,
    "max_height": 600,
    "transparent": false,
    "show_in_taskbar":true
  },
  "webkit": {
    "plugin": true
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

6、启动项目

> npm run dev

代码加密保护

有些情况下,代码还是不能直接暴露给用户的;我们可以使用V8 Snapshot 的方式来达到代码加密保护的目的;

具体的方式是使用 /nwjs.exe 来运行 nwjc source.js core.bin命令,然后再index.html里使用require(‘nw.gui’).Window.get().evalNWBin(null, ‘./app/v0.0.1/core.bin’);(注意这里的路径,是相对于nw.exe的位置)将代码引入到项目中;
可以查看 使用V8 shapshot 比不使用的变化 ;

注意 使用V8 Snapshot 还是有一些限制的 ,比如官方提到的这些;
还有就是加密的代码里不要使用 let、const这些关键字,我曾经就因为这个始终编译不通过;

自动更新

更新分为两种情况:

  • 仅仅项目的代码需要更新

  • nw.js本身也需要更新;

通常情况下,不会遇到需要更新nw.js 本身的情况,因为当选定一个版本的NW.js后,就认定它了,除非遇到了什么无法解决的BUG;

那我们先实现仅更新项目的代码这种情况吧,这个比较简单;前面介绍项目接口就提到 /app/v0.0.1/ 就是放置V0.0.1的所有代码的位置;
那么如果要更新到V0.0.2,那我们新建一个文件夹 /app/V0.0.2,然后把V0.0.2的代码都放到这个文件下,然后把/package.json替换成新版本的package.json;这样重启客户端之后,然会读取v0.0.2的代码了。具体的更新代码就不写了,可以把新版本的代码打包成zip包,然后客户端下载好,解压就行。

下面说说NW.js本身也需要更新的情况吧,这个目前我还没遇到,所以只能提供一个思路,由于nw.exe在运行时,我们是不能替换它的,那么肯定需要用别的可执行文件来替换它了,我猜钉钉的实现方式就是这种思路:

项目打包发布

一般都是使用NSIS来打包,但是别忘了在打包前,把需要保护的代码加密,然后删除源文件。干这些机械、无聊的事当然不能让自己来做,必须使用Gulp.js来啊。还能把顺便把代码压缩、文件合并什么的也干了。

执行npm run build命令

> npm run build
> nwbuild --platforms win32,win64,osx64,linux32,linux64 --buildDir dist/ src/

一些小坑

里面带的调试工具是不能打断点的,webstorm可以配置,然后就可以断点调试了;
使用NSIS打包别忘了加上文件夹权限的控制,不然会遇到文件无法写入的情况;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章