electron 快速入门

从hello world开始入手,我的环境是macOs Mojave 请确保已安装nodejs

electron 简介


electron 是一款可以使用js,html,css来构建跨平台app的开源库,Electron通过将ChromiumNode.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用。

electron 项目与web项目的区别


electron核心我们可以分成2个部分,主进程和渲染进程。主进程控制着应用的生命周期。可以打开对话框,创建渲染进程,还可以处理其它与操作系统的交互操作,包括启动和退出应用。简单理解就是连接着操作系统和渲染进程,可以把她看做页面和计算机沟通的桥梁。渲染进程 就是我们所熟悉前端环境了。只是载体改变了,从浏览器变成了window(窗口)。传统的web环境我们是不能对用户的系统就行操作的。而electron相当于node环境,我们可以在项目里使用所有的node api 。

  • 相比web项目,桌面项目多了一个进程
  • 简单理解:给web项目套上一个node环境的壳。😆

打造你的第一个Electron应用


咱们常用的编辑器 VSCode,也是基于 Electron 构建的哦~

  1. 一个最基本的 Electron 应用一般来说会有如下的目录结构:
your-app/
├── package.json
├── main.js
└── index.html
  1. 执行命令初始化文件夹
npm init
  1. 初始化之后的package.json
{
  "name": "electron_demo",
  "version": "0.0.1",
  "description": "electron_demo",
  "main": "main.js",
  "scripts": {
    "start": "electron ."
  },
  "author": "zj",
  "license": "ISC"
}

4.安装Electron 推荐使用node安装

sudo cnpm install --save-dev electron //网速不好的情况下npm安装时间较长,建议使用淘宝镜像,执行npm install -g cnpm --registry=https://registry.npm.taobao.org ,安装cnpm工具

  1. main.js内容
const { app, BrowserWindow } = require("electron"); //electron.app负责electron应用程序的声明周期,electron.BrowserWindow 类负责创建窗口
//保持对window对象的全局引用,如果不这么做的话,当JavaScript对象被垃圾回收的时候,window对象将会自动的关闭
let win;
// Electron 会在初始化后并准备
// 创建浏览器窗口时,调用这个函数。
// 部分 API 在 ready 事件触发后才能使用。例如(closed)
app.on("ready", () => {
  //创建浏览器窗口
  win = new BrowserWindow({ width: 800, height: 600 });
  //加载app的index.html
  win.loadFile("index.html");
  //打开开发者工具
  win.webContents.openDevTools();
  //当window被关闭是触发
  win.on("closed", () => {
    //取消引用 window 对象,如果你的应用支持多窗口的话,
    // 通常会把多个 window 对象存放在一个数组里面,
    // 与此同时,你应该删除相应的元素。
    win = null;
  });
});

// 当全部窗口关闭时退出。
app.on("window-all-closed", () => {
  // 在 macOS 上,除非用户用 Cmd + Q 确定地退出,
  // 否则绝大部分应用及其菜单栏会保持激活。
  if (process.platform !== "darwin") {
    app.quit();
  }
});

app.on('activate', () => {
  // 在macOS上,当单击dock图标并且没有其他窗口打开时,
  // 通常在应用程序中重新创建一个窗口。
  if (win === null) {
    createWindow()
  }
})

// 在这个文件中,你可以续写应用剩下主进程代码。
// 也可以拆分成几个文件,然后用 require 导入。

  1. index.html内容
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
</head>

<body>
    <h1>Hello World!</h1>
    <!-- All of the Node.js APIs are available in this renderer process. -->
    We are using Node.js
    <script>document.write(process.versions.node)</script>,
    Chromium
    <script>document.write(process.versions.chrome)</script>,
    and Electron
    <script>document.write(process.versions.electron)</script>.

    <script>
        console.log(process)
        // You can also require other files to run in this process
        // require('./renderer.js')
    </script>
</body>

</html>
  1. 至此就可以启动啦~~
npm start
  1. 启动之后会在菜单栏生成一个electron app


    electron app图标+打开app之后的内容

项目打包


  1. 安装electron-package
  cnpm install --save-dev electron-package 
  1. 添加script命令,用于打包electron app
"scripts": {
    "start": "electron .",
    "build": "electron-packager .  electron_demo --platform=darwin --arch=x64 --ignore=node_modules/electron-*" //electron-packager 项目目录 app名称 --platform=平台 --arch=架构 --ignore=要忽略的目录或文件
  },
  1. 执行命令打包
cnpm run build
  1. 生成文件夹
electron_demo-darwin-x64/
├── electron_demo //打包出来的项目,使用这个就可以了
├── LICENSE
├── LICENSE.chromium.html
└── version

项目压缩

  1. 安装asar
sudo cnpm install --save-dev asar
  1. 添加script命令
"scripts": {
    "start": "electron .",
    "build": "electron-packager .  electron_demo --platform=darwin --arch=x64 --ignore=node_modules/electron-*",
    "package": "asar pack electron_demo.app/Contents/Resources/app electron_demo.app/Contents/Resources/app.asar" //新增 
// asar 命令格式 asar pack <dir> <output>
  },
  1. 执行压缩命令
sudo cnpm run package
  1. 生成.asar文件


    asar文件
  2. 来个题外话,解压文件
    1.asar e app.asar <解压后的目录>
    2.asar extract app.asar <解压后的目录>

icon更改


  1. png图片(1024*1024)
  2. 新建一个暂定的目录放各种大小的图片(目录后缀必须为.iconset)
electron_demo/
├── pic.png
├── icons.iconset
└── ...
  1. 执行命令在icons.iconset中生成不同大小的图片(sips -z 裁剪图片)
sips -z 16 16     pic.png --out icons.iconset/icon_16x16.png
sips -z 32 32     pic.png --out icons.iconset/icon_16x16@2x.png
sips -z 32 32     pic.png --out icons.iconset/icon_32x32.png
sips -z 64 64     pic.png --out icons.iconset/icon_32x32@2x.png
sips -z 128 128   pic.png --out icons.iconset/icon_128x128.png
sips -z 256 256   pic.png --out icons.iconset/icon_128x128@2x.png
sips -z 256 256   pic.png --out icons.iconset/icon_256x256.png
sips -z 512 512   pic.png --out icons.iconset/icon_256x256@2x.png
sips -z 512 512   pic.png --out icons.iconset/icon_512x512.png
sips -z 1024 1024   pic.png --out icons.iconset/icon_512x512@2x.png

4.package.json中增加打包icon及系统icon

"scripts": {
    "start": "electron .",
    "build": "electron-packager .  electron_demo --icon=Icon.icns --platform=darwin --arch=x64 --ignore=node_modules/electron-*",
    "package": "asar pack electron_demo.app/Contents/Resources/app electron_demo.app/Contents/Resources/app.asar"
  },
"mac":{
      "icon":"Icon.icns"
  }

5.执行打包命令就可以看到最新图标了

cnpm run build

参考文档


后期优化内容


  1. 构建安装包可支持下载;
  2. 自动更新;
  3. 安装包太大;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容

  • 本文将通过hello word案例,来记录学习electron的过程。注:我的环境是 macOS Sierra,不...
    回调的幸福时光阅读 15,604评论 5 40
  • 快速入门 Electron 可以让你使用纯 JavaScript 调用丰富的原生 APIs 来创造桌面应用。你可以...
    靳刘杰阅读 3,770评论 0 2
  • 用KT法分析问题,一个问题的形成有很多因素,把组成因素找出来进行逐个分析突破,最后达到目的。
    临淄茂业DDM_闫丹丹阅读 195评论 0 0
  • 公子无知非常高兴这个电话来得太及时,以至于手机显示是一个诈骗电话的时候,他恨不得拥抱电话那头的诈骗犯。 “喂,你好...
    原疯不动阅读 332评论 0 8
  • 今天朋友约我去看电影金刚,我只知道这是好莱坞大片,并不知道是谁演的,但看了之后,我换男神了,没错就是抖..抖......
    江式微阅读 359评论 2 4