2015-03-16 11:20:23 +00:00
|
|
|
# Technical differences to NW.js (formerly node-webkit)
|
2014-05-06 07:16:54 +00:00
|
|
|
|
2015-04-16 03:31:12 +00:00
|
|
|
__Note: Electron was previously named Atom Shell.__
|
|
|
|
|
|
|
|
Like NW.js, Electron provides a platform to write desktop applications
|
2015-04-26 23:35:52 +00:00
|
|
|
with JavaScript and HTML and has Node integration to grant access to low level
|
2014-05-06 07:16:54 +00:00
|
|
|
system in web pages.
|
|
|
|
|
2014-05-06 16:52:24 +00:00
|
|
|
But there are also fundamental differences between the two projects that make
|
2015-04-16 03:31:12 +00:00
|
|
|
Electron a completely separate product from NW.js:
|
2014-05-06 07:16:54 +00:00
|
|
|
|
2015-04-16 03:31:12 +00:00
|
|
|
__1. Entry of application__
|
2014-05-06 07:16:54 +00:00
|
|
|
|
2015-04-26 23:35:52 +00:00
|
|
|
In NW.js, the main entry of an application is a web page. You specify a
|
|
|
|
main page in the `package.json` and it is opened in a browser window as
|
2014-05-06 07:16:54 +00:00
|
|
|
the application's main window.
|
|
|
|
|
2015-04-26 23:35:52 +00:00
|
|
|
In Electron, the entry point is a JavaScript script. Instead of
|
|
|
|
providing a URL directly, you manually create a browser window and load
|
|
|
|
an HTML file using the API. You also need to listen to window events
|
2014-05-06 07:16:54 +00:00
|
|
|
to decide when to quit the application.
|
|
|
|
|
2015-04-26 23:35:52 +00:00
|
|
|
Electron works more like the Node.js runtime. Electron's APIs are lower level
|
|
|
|
so you can use it for browser testing in place of [PhantomJS](http://phantomjs.org/).
|
2014-05-06 07:16:54 +00:00
|
|
|
|
2015-04-16 03:31:12 +00:00
|
|
|
__2. Build system__
|
2014-05-06 07:16:54 +00:00
|
|
|
|
2015-04-16 03:31:12 +00:00
|
|
|
In order to avoid the complexity of building the whole Chromium, Electron uses
|
2014-05-06 07:16:54 +00:00
|
|
|
[libchromiumcontent](https://github.com/brightray/libchromiumcontent) to access
|
2015-04-26 23:35:52 +00:00
|
|
|
Chromium's Content API. libchromiumcontent is a single, shared library that
|
|
|
|
includes the Chromium Content module and all its dependencies. Users don't
|
2015-04-16 03:31:12 +00:00
|
|
|
need a powerful machine to build Electron.
|
2014-05-06 07:16:54 +00:00
|
|
|
|
2015-04-16 03:31:12 +00:00
|
|
|
__3. Node integration__
|
2014-05-06 07:16:54 +00:00
|
|
|
|
2015-03-11 20:24:59 +00:00
|
|
|
In NW.js, the Node integration in web pages requires patching Chromium to
|
2015-04-26 23:35:52 +00:00
|
|
|
work, while in Electron we chose a different way to integrate libuv loop with
|
|
|
|
each platform's message loop to avoid hacking Chromium. See the
|
2014-05-06 07:16:54 +00:00
|
|
|
[`node_bindings`](../../atom/common/) code for how that was done.
|
|
|
|
|
2015-04-16 03:31:12 +00:00
|
|
|
__4. Multi-context__
|
2014-05-06 07:16:54 +00:00
|
|
|
|
2015-03-11 20:24:59 +00:00
|
|
|
If you are an experienced NW.js user, you should be familiar with the
|
2015-04-26 23:35:52 +00:00
|
|
|
concept of Node context and web context. These concepts were invented because
|
|
|
|
of how NW.js was implemented.
|
2014-05-06 07:16:54 +00:00
|
|
|
|
|
|
|
By using the [multi-context](http://strongloop.com/strongblog/whats-new-node-js-v0-12-multiple-context-execution/)
|
2015-04-16 03:31:12 +00:00
|
|
|
feature of Node, Electron doesn't introduce a new JavaScript context in web
|
2014-05-06 07:16:54 +00:00
|
|
|
pages.
|