开发桌面应用框架 Atom Shell

MIT
C/C++
跨平台
GitHub
2014-08-04
英特那雄纳尔

Atom Shell 现已改名为 Electron

atom-shell 是 GitHub 随 Atom 一起开源的跨操作系统(Windows,Linux,MacOS X)的利用 Web 技术(Node.js、JavaScript、HTML 5)开发桌面应用的框架。Atom即构建在 atom-shell 之上。

与 Node-Webkit 的区别

atom-shell 和Node-Webkit很像,那么两者有什么区别呢?

1. 程序入口

Node-Webkit 的程序入口是一个网页,你在package.json中指定主页,然后这个主页会在浏览器中打开,作为应用程序的主窗口。

atom-shell 的程序入口则是一个 JavaScript 脚本,而不是直接指定一个 URL。你需要手动创建浏览器窗口,并通过相应的 API 加载 html 文件。你同时需要监听窗口事件以便决定何时退出应用。

因此,atom-shell 更接近 Node.js 运行时,API 也更加底层,你可以利用 atom-shell 进行 web 测试,类似phantomjs

2. 编译系统

atom-shell 使用libchromiumcontent访问 Chromium 的 Content API,这样编译 atom-shell 的时候就不用编译整个 Chromium (编译 Chromium 非常费时)。

顺便提一下,GitHub 开发者还创建了brightray库,让 libchromiumcontent 的使用更方便。

3. Node 集成

Node-Webkit 的 Node 集成需要给 Chromium 打补丁才能工作。atom-shell 通过集成 libuv loop 和 平台的 message loop 避免给 Chromium 打补丁。

4. Multi-context

Node-Webkit 创造了 Node context 和 web context 的概念,而 atom-shell 没有引入新的 context,而是直接使用 Node 的 Multi-context 特性(这一特性是 Atom 开发者赞助 Node 添加的)。

作者

GitHub 最初考察了 Node-Webkit,但是最终还是决定雇佣@zcbenz来开发想要的框架。于是 atom-shell 诞生了。

一个最简单的 hello atom 示例项目请看 hello-atom

主程序示例:

var app = require('app');  // Module to control application life.
var BrowserWindow = require('browser-window');  // Module to create native browser window.

// Report crashes to our server.
require('crash-reporter').start();

// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the javascript object is GCed.
var mainWindow = null;

// Quit when all windows are closed.
app.on('window-all-closed', function() {
  if (process.platform != 'darwin')
    app.quit();
});

// This method will be called when atom-shell has done everything
// initialization and ready for creating browser windows.
app.on('ready', function() {
  // Create the browser window.
  mainWindow = new BrowserWindow({width: 800, height: 600});

  // and load the index.html of the app.
  mainWindow.loadUrl('file://' + __dirname + '/index.html');

  // Emitted when the window is closed.
  mainWindow.on('closed', function() {
    // Dereference the window object, usually you would store windows
    // in an array if your app supports multi windows, this is the time
    // when you should delete the corresponding element.
    mainWindow = null;
  });
});

支持很多桌面应用特性,例如 Dock 菜单等:

使用 Dock 菜单的方法:

var app = require('app');
var Menu = require('menu');
var dockMenu = Menu.buildFromTemplate([
  { label: 'New Window', click: function() { console.log('New Window'); } },
  { label: 'New Window with Settings', submenu: [
    { label: 'Basic' },
    { label: 'Pro'},
  ]},
  { label: 'New Command...'},
]);
app.dock.setMenu(dockMenu);

PS:网易也有开放了Hex,同样是不满意node-webkit,就自己做了套.

加载中

评论(16)

英特那雄纳尔
英特那雄纳尔
atom-shell 不支持winxp,瞎忙活了2天
开源妇科主任
开源妇科主任
hex 真的不行。不兼容XP,渲染总是感觉不稳定。当然,透明是他的杀器~ 但那又如何~ Atom Shell
bygreencn
bygreencn
咋能让它支持呢 Atom Shell
伊藤熊吉
伊藤熊吉
js大法好 Atom Shell
Jack_Zhu
Jack_Zhu
还有个AppJS,不过好久没更新了 Atom Shell
maverickpuss
maverickpuss
什么时候开始用呢,估计现在还不稳定。。 Atom Shell
a
appjack
我关心的是打包完 应用有多大? Atom Shell
crazymus
crazymus
这样的项目有不少了,没有真正流行起来的~ Atom Shell
sunday12345
sunday12345
妈蛋。。。JS真的要一统天下了~~~ Atom Shell

暂无资讯

2
回答
linux shell 编程的注释 没办法注释掉 $n吗?

我注释掉了 但$n还是 生效 不输入参数就报错 运行 -这个.sh文件 没有其他代码的情况下 , 只有带参数 才不会报错 不能能注释掉吗

04/26 14:08
2
回答
Atom Shell 的 hellworld 应用打包后要多大
eechen 的回答 2014/12/26 20:36
最佳答案
引用来自“hellogirl”的评论 还是安分的研究xulrunner为好,这类东西都只能小打小闹。 CEF(Chromium Embedded Framework)和Node.JS不是小打小闹吧,有道词典使用的heX就用到了CEF和Node.JS,Adobe开源的编辑器Brackets也用到...
2
回答
为NodeJs编写的Addon如何无缝的使用到AtomShell上

如题,现在想为Atom-Shell编写一个核心扩展,使得其编写的程序可以方便的调用Windows本地的dll中的导出函数和类。但是目前只在网上查到如何为N...

2014/08/25 10:08

没有更多内容

加载失败,请刷新页面

没有更多内容

用GIT安装Atom报错

用GIT安装Atom报错、gyp

2016/04/01 11:06
94
1
ubuntu14下atom中文乱码方块

[http://blog.leanote.com/post/rexlevin/ubuntu14%E4%B8%8Batom%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81%E6%96%B9%E5%9D%97](http://blog.leanote.com/post/rexlevin/ubuntu14%E4%B8%8Batom%E...

2015/09/14 19:00
91
0
记一个同时支持模糊匹配和静态推导的Atom语法补全插件的开发过程: 序

使用正则表达式来进行变量真实的静态推导,真的很有新意!

2016/10/23 22:28
54
0
使用etop查看系统中进程信息

Erlang提供了丰富的开发工具,你认为没有的时候,很可能是你不知道它存在. 在OS中,我们经常查看操作系统的进程信息,帮助我们进行诊断。 Erlang提供了一个小工具 etop (Erlang top), 用来查...

2011/11/23 14:09
176
0
使用Electron开发桌面应用

Electron 框架的前身是 Atom Shell,可以让你写使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序。它是基于io.js 和 Chromium 开源项目,并用于在 Atom 编辑器中。Electron 是开源的,...

2016/11/08 20:23
107
0
[node] 用 node-webkit 开发桌面应用

## 用到的技术 - node-webkit (or atom-shell) - node, npm, bower, grunt - angularjs - [jade](http://jade-lang.com) - bootstrap ## project seed - [我存的](http://git.oschina.net/xi...

2015/01/19 18:38
255
0
js框架 AngularJS+Bootstrap

关于js框架我们选用AngularJS+Bootstrap,各位熟悉吗? 浏览器端和桌面客户端都基于此框架进行,桌面客户端我们会使用基于node.js的客户端解决方案,这样我们只要一直基于web技术来构建就可以...

2016/03/15 17:51
56
1
安卓开发环境搭建

目录 安卓开发环境搭建 SDK管理(是针对硬盘容量有限) SQLite 管理 安卓开发环境搭建 环境Eclipse 4.4( for java )注 , ADT 推荐国内下载地址:http://tools.android-studio.org/index.php...

2016/07/11 14:29
96
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部