与 NW.js 相似,Electron 提供了一个能通过 JavaScript 和 HTML 创建桌面应用的平台,同时集成 Node 来授予网页访问底层系统的权限。
但是这两个项目也有本质上的区别,使得 Electron 和 NW.js 成为两个相互独立的产品。
1. 程序的入口
在NW.js中,应用的主入口是网页或者JS脚本。 你需要在package.json中指定一个html或者js文件,一旦应用的主窗口(在html作为主入口点的情况下)或脚本被执行,应用就会在浏览器窗口打开。
在 Electron 中,入口是一个 JavaScript 脚本。 不同于直接提供一个URL,你需要手动创建一个浏览器窗口,然后通过 API 加载 HTML 文件。 你还可以监听窗口事件,决定何时让应用退出。
Electron 的工作方式更像 Node.js 运行时。 Electron 的 APIs 更加底层,因此你可以用它替代 PhantomJS 做浏览器测试。
2. 构建系统
为了避免构建整个 Chromium 带来的复杂度,Electron 通过 libchromiumcontent 来访问 Chromium 的 Content API。 libchromiumcontent 是一个独立的、引入了 Chromium Content 模块及其所有依赖的共享库。 用户不需要一个强劲的机器来构建 Electron。
3. Node 集成
在 NW.js,网页中的 Node 集成需要通过给 Chromium 打补丁来实现。但在 Electron 中,我们选择了另一种方式:通过各个平台的消息循环与 libuv 的循环集成,避免了直接在 Chromium 上做改动。 你可以查看 node_bindings 来了解这是如何完成的。
4. 多上下文语境
如果你是有经验的 NW.js 用户,你应该会熟悉 Node 上下文和 web 上下文的概念。这些概念的产生源于 NW.js 的实现方式。
通过使用Node的multi-context(多上下文)特性,Electron不需要在网页中引入新的Javascript上下文。
注意: 自从 0.13 以来,NW.js 选择性支持多上下文。
用LTS版本0.14.7这个版本。于业务需要,得用nwjs来离线展示静态网页,网页中包含Flash,同时为了兼顾XP系统和Win7,所以采用了nwjs的LTS版本0.14.7,这个版本中的Chromium为50,而支持XP的Chrome最高版本为49,在网上下载了一个32位的绿色版Chrome49,将文件夹中的PepperFlash这个文件夹复制到了nwjs的根目录下,这样就可以正常显示Flash_容了,并且在XP和64位Win7下都能正常显示。
nw.js即原来的node-webkit,允许你从DOM直接调用node.js中的模块。它可以让你使用任务web技术来开发本地应用。package.json和index.html和nw.exe我的环境为windows下在同一目录下。然后运行nw.exe。一个helloworld程序就写好了。阿里的钉钉就是使用nwjs开发的,其好处当然是很多。会web开发就能开发本地应用,可以发布到window,linux,mac等不同平台。