如何新建一个 Electron 项目?

electron快速入门笔记: https://www.jianshu.com/p/f134878af30f

然后自己新建一个 Electron 项目,在项目中输出 Hello World!

Electron 的背景信息

搭建完这个 Electron 项目后,相信大家对 Electron 已经有了初步的认知,接下来我们可以查看文档来获取 Electron 更多的背景信息: https://electronjs.org/docs/tutorial/about

我们知道 Electron 使用了 Chromium 的渲染库,我们可以把它看作一个精简版的 Chromium 浏览器。

Electron 里,存在一个 主进程 和一个 渲染进程,我们可以在下文中看到 主进程 和 渲染进程 的区别: https://www.w3cschool.cn/electronmanual/p9al1qkx.html

当我们运行一个 Electron 客户端时,客户端窗口是如何打开的?

这部分内容前面的几篇文章里也有,比较重要,这里单独拿出来再说一下:

我们在 package.json 中可以找到 "main" 属性,一般为 {"main": "./main"};

这里我们就是启动了 主进程 main.js, 我们打开 main.js 文件, 可以看到如下代码:

const { app, BrowserWindow } = require('electron');
const path = require('path');
const url = require('url'); let window; function createWindow() {
window = new BrowserWindow({ width: 1200, height: 900 }); window.loadURL(url.format({
pathname: path.join(__dirname, './index.html'),
protocol: 'file:',
slashes: true
})); // 打开调试工具.
window.webContents.openDevTools(); // 当 window 关闭时触发.
window.on('closed', () => {
window = null
})
} // 'ready' 后开始 createWindow
app.on('ready', createWindow); // Quit when all windows are closed.
app.on('window-all-closed', () => {
// On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (process.platform !== 'darwin') {
app.quit();
}
}); app.on('activate', () => {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (window === null) {
createWindow();
}
});

我们可以看到这个文件中有一些 app.on 来接收事件,当 app.on('ready', createWindow) 时,我们调用了 createWindow 函数;在 createWindow 函数中创建了 new BrowserWindow, 然后进入了 ./index.html 文件。

备注:我们可以在这个文档中查到更多的事件: https://electronjs.org/docs/api/app

回到我们的 小班教室 和 1vN 客户端,我们来简单介绍下我们用到的一些 事件:

'ready': 当 Electron 完成初始化时被触发。
'open-url': 当用户想要在应用中打开一个 URL 时发出。
'activate': 当应用被激活时发出。
'before-quit': 在应用程序开始关闭窗口之前触发。
'window-all-closed': 当所有的窗口都被关闭时触发。

主进程(main)和渲染进程(renderer)间的通信

在 项目开发中,我们总会有时候,需要在 main 和 renderer 之间进行通信,Electron 提供了相应的通信方法:

ipcMain: https://electronjs.org/docs/api/ipc-main#ipcmain
ipcRenderer: https://electronjs.org/docs/api/ipc-renderer#ipcrenderer

在我们的客户端中,引入了 'electron-ipc' 库,使得通信方法更加简单:

const ipcp = require('electron-ipc');

// 发送
ipcp.publish('msgName', 'sendInfo'); // 接收
ipcp.subscribe('msgName', (msg) => {
console.log('msg', msg) // 'msg' 'sendInfo'
})

其中 'msgName' 是通道名(channel)。

如果我们想要在 subscribe 接收到消息之后再在 publish 的地方做出相关处理,则可以采用如下方式:

const ipcp = require('electron-ipc');

// 发送
ipcp.publish('msgName', 'sendInfo').then((res) => {
console.log('res', res) // 'res' 'msg has been accepted'
}); // 接收
ipcp.subscribe('msgName', (msg) => {
console.log('msg', msg) // 'msg' 'sendInfo'
return 'msg has been accepted'
})

这个依赖库让我们使用 ipc 通信更加简单,无需再考虑 main 和 renderer 的不同写法。具体实现逻辑可以查看源码,,源码中实际上只是做了一丢丢判断:

const IS_RENDERER = typeof window !== 'undefined' && window.process && window.process.type === 'renderer'
const TARGET = IS_RENDERER ? electron.ipcRenderer : electron.ipcMain 本篇来自于他人总结哦!

electron客户端开发的更多相关文章

  1. Electron+Vue开发跨平台桌面应用

    Electron+Vue开发跨平台桌面应用 xiangzhihong发布于 2019-12-23 虽然B/S是目前开发的主流,但是C/S仍然有很大的市场需求.受限于浏览器的沙盒限制,网页应用无法满足某 ...

  2. C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 多系统开发接口 - 苹果客户端开发接口

    最近工作上需要,给苹果客户端开发接口,实现集中统一的用户管理,下面是接口调用参考. 1: 获取OpenId? http://127.0.0.1/GetOpenId.ashx?username=Admi ...

  3. 在线教学、视频会议 Webus Fox(3) 客户端开发手册

    本文主要介绍webus fox 客户端的配置及接口说明. 1. 文件列表和配置 1.1 文件列表 1.2 common.xml 配置 根据服务器端的部署, 替换[ServerUrl] , [RtmpP ...

  4. [原创]上海好买基金招高级Java技术经理/运维主管/高级无线客户端开发等职位(内推)

    [原创]上海好买基金招高级Java技术经理/运维主管/高级无线客户端开发等职位(内推) 内部推荐职位 高级JAVA技术经理: 岗位职责: 负责项目管理(技术方向),按照产品开发流 ,带领研发团队,制定 ...

  5. iOS客户端开发与Web前端开发

    转载自:http://blog.cnbang.net/tech/1813/不知不觉做iOS客户端开发已经半年多了,了解到iOS客户端开发与Web前端开发的一些异同,写一下. 版本升级.用户角度上看,客 ...

  6. 基于Android的小巫新闻客户端开发系列教程

    <ignore_js_op> 141224c6n6x7wmu1aacap7.jpg (27.51 KB, 下载次数: 0) 下载附件  保存到相册 23 秒前 上传   <ignor ...

  7. ASP.NET5之客户端开发:Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用

    Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.css预处理器的构建工具,它帮助开发者处理客户端开发中的一些烦操重复性的工作.Grun ...

  8. [转] electron实战开发详细流程

    [From] http://www.myk3.com/arc-8856.html 很久没有更新博客,人越来越懒了,唉 说好做的electron教程距离上次玩electron已经过去了好几个月了.. 这 ...

  9. 用Jersey为Android客户端开发Restful Web Service

    平时在做Android客户端的时候经常要与服务器之间通信,客户端通过服务端提供的接口获取数据,然后再展示在客户端的界面上,作为Android开发者,我们平时更多的是关注客户端的开发,而对服务端开发的关 ...

随机推荐

  1. MangoDB在C#中的使用

    http://blog.sina.com.cn/s/blog_927f3c2401011937.html 图形工具 http://api.mongodb.org/csharp/current/html ...

  2. Mac之Sublime Text使用Go

    安装Golang build 包 点击 Preferences > Package control 菜单(MAC快捷键 shift + command + p) 在弹出的输入框输入 instal ...

  3. 备份的数据库文件(500M左右)无法导入的解决方法

    解决方法: 修改配置文件/usr/local/mysql/my.cnf 在my.cnf文件下添加一句:max_allowed_packet=900M 注:此处大小不能设置过大,过大可能会导致还原过程中 ...

  4. 安装openssh-server报Depends: openssh-client (= 1:6.6p1-2ubuntu2.8)错误

    SFTP称作“安全的FTP”,它使用ssh文件传输协议.所以我们需要安装openssh-server ubuntu自带的有openssh-client,所以可以通过 ssh username@host ...

  5. Android 滚动隐藏标题栏 和FAB按钮实现

    主页面: package com.loaderman.samplecollect.hideonscroll; import android.content.Intent; import android ...

  6. 基于Android的ADT目录

    src: 源代码(重要) gen : 工具自动生成的代码 > BUildconfig 调试的开关,默认开启 > R.java 很多的静态的内部类 > 开发用的jar包 Android ...

  7. QDateTime QString

    QDateTime格式化  yyyy-MM-dd hh:mm:ss QString getFormatDateStr(QDateTime dateTimeParam) { qDebug() <& ...

  8. 源码安装LNMP

    需要准备的安装包以及下载地址(只是一个大概地址,版本和下载方式需要自行选择): Nginx http://nginx.org/en/download.html nginx主程序包 MySQL http ...

  9. matlab学习——02整数规划(蒙特卡洛法,指派问题,混合整数规划)

    02整数规划 蒙特卡洛法(随机取样法) 编写文件mengte.m,目标函数f和约束向量g function[f,g]=mengte(x); f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4 ...

  10. MG7780打印机喷嘴堵塞

    1.深度清洗,打印喷嘴图案,发现有颜色没有打印出来 2.墨盒一加墨水就往外冒,以为是满的,其实是内部已经堵塞而加不进去,因为出墨口并没有墨水向外流(出墨口没有盖起来).解决办法就是用没有针头的针管从加 ...