基础概述
NW.js
是基于 Chromium
和 Node.js
运行的, 以前也叫nodeWebkit
。这就给了你使用HTML和JavaScript来制作桌面应用的可能。在应用里你可以直接调用Node.js的各种api以及现有的第三方包。因为Chromium和 Node.js 的跨平台,那么你的应用也是可以跨平台的。
Getting Started
1、安装对应的模块包:
cnpm install nw nw-builder -S
nw
:基于Chromium和io.js的应用程序运行时。用于构建将在OSX,Windows和Linux上运行的桌面应用程序。https://www.npmjs.com/package/nwnw-builder
: 以编程方式或通过CLI为Mac,Win和Linux 构建NW.js应用程序。https://www.npmjs.com/package/nw-builder
2、初始化项目目录结构
- package.json
- src
-- package.json
-- views
-- main.html
-- assets
- dist
3、初始化配置package.json
的scripts
命令
{
"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打包别忘了加上文件夹权限的控制,不然会遇到文件无法写入的情况;