github地址:github.com/pfan123/ele…
Electron 是一款可以利用 Web技术 开发跨平台桌面应用的框架,最初是 Github 发布的 Atom 编辑器衍生出的 Atom Shell,后更名为 Electron。Electron 提供了一个能通过 JavaScript 和 HTML 创建桌面应用的平台,同时集成 Node 来授予网页访问底层系统的权限。目前常见的有NW、heX、Electron,可以打造桌面应用。
前不久Electron在GitHub发布了Electron1.0版本,Electron Documentation。
electron项目
electronic-wechat
WeFlow
Hozz
hummingbird
ElectronOCR
N1
Electron学习资料
Electron文档
electron docs-translations zh-CN
Electron博文
electron-linvodb-manager leveldb的管理工具
Electron快速上手demo
Electron开发工程
首先安装依赖
# Install the `electron` command globally in your $PATH
npm install electron-prebuilt -g // 全局安装之后,就可以通过electron . 启动应用 涉及到electron-v1.2.2-darwin-x64可能引起安装不成功
# Install as a development dependency
npm install electron-prebuilt --save-dev
electron-quick-start官方的一个应用demo,不太明白dev安装electron-prebuilt的原因本身按道理来说应该是electron .
,其实全局安装了electron-prebuilt,dev是不需要的注意呢。
分析官方demo,其实一个 Electron 应用的目录结构大体如下:
app/
├── package.json
├── main.js
└── index.html
package.json
的格式和 Node 的完全一致,并且那个被 main 字段声明的脚本文件是你的应用的启动脚本,它运行在主进程上。你应用里的 package.json
看起来应该像:
{
"name" : "app",
"version" : "0.1.0",
"main" : "main.js"
}
注意:如果 main 字段没有在 package.json
声明,Electron会优先加载 index.js
。
main.js
应该用于创建窗口和处理系统时间,一个典型的例子如下:
var app = require('app'); // 控制应用生命周期的模块。
var BrowserWindow = require('browser-window'); // 创建原生浏览器窗口的模块
// 保持一个对于 window 对象的全局引用,不然,当 JavaScript 被 GC,
// window 会被自动地关闭
var mainWindow = null;
// 当所有窗口被关闭了,退出。
app.on('window-all-closed', function() {
// 在 OS X 上,通常用户在明确地按下 Cmd + Q 之前
// 应用会保持活动状态
if (process.platform != 'darwin') {
app.quit();
}
});
// 当 Electron 完成了初始化并且准备创建浏览器窗口的时候
// 这个方法就被调用
app.on('ready', function() {
// 创建浏览器窗口。
mainWindow = new BrowserWindow({width: 800, height: 600});
// 加载应用的 index.html
mainWindow.loadURL('file://' + __dirname + '/index.html');
// 打开开发工具
mainWindow.openDevTools();
// 当 window 被关闭,这个事件会被发出
mainWindow.on('closed', function() {
// 取消引用 window 对象,如果你的应用支持多窗口的话,
// 通常会把多个 window 对象存放在一个数组里面,
// 但这次不是。
mainWindow = null;
});
});
最后,你想展示的 index.html
:
Hello World!
Hello World!
We are using io.js
and Electron .
运行你的应用
一旦你创建了最初的 main.js
, index.html
和 package.json
这几个文件,你可能会想尝试在本地运行并测试,看看是不是和期望的那样正常运行。
electron-prebuild
如果你已经用 npm 全局安装了 electron-prebuilt,你只需要按照如下方式直接运行你的应用:
electron .
如果你是局部安装,那运行:
./node_modules/.bin/electron .
electron打包生成
electron应用开发完成之后,打包生产相应平台应用,通常推荐的工具有electron-packager
和asar
。
electron-packager打包生成各平台的程序
用electron-packager打包生成各平台的程序,还是很方便的,但是有些坑。
速度慢
对某个平台第一次打包的时候,packager需要下载对应的electron包,那速度真是慢啊!
幸好淘宝有electron镜像。通过设置ELECTRON_MIRROR环境变量,可以大大加快速度。
export ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron/
如果这样还是没法下载,建议:
直接从electron包地址下载最新的
electron
包,然后放到`~/.electron `目录下,重新执行 electron-prebuilt 即可,原理 electron-download 模块会把下载好的文件放到用户目录的 .electron 中,如果存在即不会重新下载。此方法同样适用于打包工具 electron-package、electron-builder
体积大
electron打包出来的程序,一般至少100M,对于一个小程序来说有点太大了,体积问题感觉是很多跨平台工具的通病。
为了减少体积,记得使用packager的ignore参数,排除掉例如electron等程序运行不必要的包,如果指定了packager的输出路径在程序的目录,记得也排除掉,不然会越打包越大。
最后我使用的打包命令如下:
electron-packager --platform= win32,darwin --arch=all --version=0.33.7 --out=dist/ --overwrite --ignore=node_modules/electron-* --ignore=node_modules/.bin --ignore=.git --ignore=dist --prune
: 项目的位置
: 应用名
--platform=
: 打包的系统(darwin、win32、linux)--arch=
: 系统位数(ia32、x64)--icon=
: 指定应用的图标(Mac 为 .icns 文件,Windows 为 .ico 或 .png)--out
: 指定输出的目录--version=
: 指定编译的 electron-prebuilt 版本
简单例子
electron-packager . kaoqin --platform=win32 --arch=all --icon=./public/images/icon.ico --version=0.36.4 --out=../dist/ --overwrite=true --ignore=node_modules/electron-* --ignore=node_modules/.bin --ignore=.git --ignore=dist --prune=true
electron-packager
把命令写在`package.json`的scripts里,比如`package`命令,则打包时运行:
其中,例子
location of project是你项目文件夹的位置,
name of project定义你的项目名,
platform决定要构建的平台(all 包括Windows,Mac和Linux ),
architecture决定构建哪个构架下(x86或x64,all表示两者),
electron version让你选择要用的Electron版本
export ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron/
注意
:使用electron-packager
打包,os系统打包os.app文件,不能打包window文件,windows系统可以打包os文件以及exe文件。electron-builder打包msi、exe、dmg文件,os系统,只能打包dmg文件,window系统才能打包exe,msi文件。
electron-builder打包配置
1.package.json
文件需包含应用程序指定字段: name, description, version and author。
2.需在package.json
文件配置,build字段:
"build": {
"appId": "your.id",
"app-category-type": "your.app.category.type",
"win": {
"iconUrl": "(windows-only) https link to icon"
}
}
3.在工程根目录简历build
文件夹包含background.png (MacOS DMG background), icon.icns (MacOS app icon) and icon.ico (Windows app icon)。
4.增加执行script:
"scripts": {
"postinstall": "install-app-deps",
"pack": "build --dir",
"dist": "build"
}
使用asar
npm i asar -g
npm i asar --save-dev
"scripts": {
"start": "electron .",
"build": "electron-packager . MyFirstApp --ignore=node_modules/electron-* --platform=win32 --arch=x64 --version=0.32.3",
"package": "asar pack MyFirstApp-win32-x64/resources/app MyFirstApp-win32-x64/resources/app.asar && rm -rf MyFirstApp-win32-x64/resources/app"
}
npm run package
参考资料:
electron-builder - 直接打包成二进制文件
grunt-electron - grunt plugin for electron-packager
gulp-electron - gulp plugin for electron-packager
electron-packager-interactive - an interactive CLI for electron-packager