前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Atom-Shell 入门

Atom-Shell 入门

作者头像
mmzhou
发布2018-08-01 17:06:03
1.3K0
发布2018-08-01 17:06:03
举报
文章被收录于专栏:前端小作坊前端小作坊

Atom-Shell 入门

现在已经有很多框架可以让我们用JavaScript、HTML和CSS来编写跨平台桌面应用,Atom Shell便是其中之一。Atom Shell基于nodejs和Chromium实现,Github的开源编辑器Atom便是基于Atom shell和Coffee scrpit开发的。

Chromium浏览器可以分为两个部分:Browser端和Render端。Browser端负责与本地系统交互:创建窗口、控制托盘图标等等。Render端负责绘制页面。两者通过IPC交互。Atom Shell的实现是在Browser端和Render端分别嵌入了nodejs。这样Browser和Render两部分就都可以使用nodejs提供的api了,也可以在Browser端用javascript来调用本地系统相关的API。

Browser端

在Web app中我们通常会有两种javascript脚本:服务器端脚本和客户端端脚本。客户端端脚本运行于浏览器中,服务器端脚本运行于nodejs中。在Atom Shell中有类似的概念,运行于Render端页面中的脚本和运行于browser端中的脚本。分别可以称它们为:Render端脚本和Browser端脚本。

在传统的Web app中,服务器端脚本和客户端脚本通常使用web sockets来通信。在Atom Shell中,Render端脚本需要使用ipc模块来发送信息给rowser端。同时Atom Shell还提供了一个更易用的remote模块来支持通信。

Render端

普通的网页是无法操作浏览器以外的本地系统的。而在Atom Shell中nodejs api可以在网页中使用,所以开发者可以在网页中访问本地资源,就像Node-Webkit一样。

但是和Node-Webkit不一样的是:不能直接在网页中(Render端)操作本地资源,只能通过remote模块调用Browser端脚本操作本地资源。

DEMO

通常一个Atom Shell app的文件目录如下:

代码语言:javascript
复制
your-app/
├── package.json
├── main.js
└── index.html

package.json的格式和普通的Node模块中的一样。其中属性main的值表示app的入口脚本,这个脚本会运行在Browser端中。如下是package.json文件的样例:

代码语言:javascript
复制
{
    "name"    : "your-app",
    "version" : "0.1.0",
    "main"    : "main.js"
}

main.js中应该创建窗口并处理相应的系统事件,下面是一个典型的样例:

代码语言:javascript
复制
// 用于控制app的life circle
var app = require('app');
// 用于创建本地窗口的模块
var BrowserWindow = require('browser-window');    
// 把app的crash情况发送给服务器
require('crash-reporter').start();

// 保持一个全局的window对象引用,
// 如果你不这么做,window对象会在GC启动后被自动垃圾收集机制释放
var mainWindow = null;

// 在所有窗口关闭后关闭app
app.on('window-all-closed', function() {
  if (process.platform != 'darwin')
    app.quit();
});

// 这个方法会在Atom Shell初始化结束后调用回调函数
app.on('ready', function() {
  // 创建窗口
  mainWindow = new BrowserWindow({width: 800, height: 600});

  // 加载index.html
  mainWindow.loadUrl('file://' + __dirname + '/index.html');

  // 在窗口关闭时触发
  mainWindow.on('closed', function() {
      // 移除window对象的引用
      // 通常如果是多窗口的app,你需要把window对象存储到一个数组里面,而在close时把对应的window对象移除掉
    mainWindow = null;
  });
});

最后创建需要在窗口中显示的index.html

代码语言:javascript
复制
<!DOCTYPE html>
<html>
  <head>
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    We are using node.js <script>document.write(process.version)</script> and atom-shell <script>document.write(process.versions['atom-shell'])</script>.
  </body>
</html>

运行App

首先下载Atom Shell的可执行文件。然后运行如下命令执行app:

  1. windows:.\atom-shell\atom.exe your-app\
  2. Linux: ./atom-shell/atom your-app/
  3. Mac OS X: ./Atom.app/Contents/MacOS/Atom your-app/

打包

你只需要把app的文件夹命名为app,并把它放在Atom Shell的资源目录下。在OS X系统中为Atom.app/Contents/Resources/,在Linux和Windows上为resources/。然后执行Atom.app(在Linux中为atom,在windows中为atom.exe)即可。然后把atom-shell文件夹压缩打包分发给用户即可。

如果你用的打包工具是grunt,那么可以用grunt-download-atom-shell来自动下载对应平台的Atom Shell。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Atom-Shell 入门
    • Browser端
      • Render端
        • DEMO
          • 运行App
            • 打包
            相关产品与服务
            对象存储
            对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档