前端Electron新手入门教程详解


Posted in Javascript onJune 21, 2019

Electron 是什么

定义

Electron是一个能让你使用传统前端技术(Nodejs, Javascript, HTML, CSS)开发一个跨平台桌面应用的框架。这里所说的桌面应用指的是在Windows、OSX及Linux系统上运行的程序。

历史

2013年的时候,Atom编辑器问世,作为实现它的底层框架Electron也逐渐被熟知,到2014年时被开源,那时它还是叫Atom Shell。

接下来的几年,Electron在不断的更新迭代,几乎每年都有一个重大的里程碑

  • 2013年4月11日,Electron以Atom Shell为名起步。
  • 2014年5月6日,Atom以及Atom Shell以MIT许可证开源。
  • 2015年4月17日,Atom Shell改名为Electron。
  • 2016年5月11日,1.0版本发布。
  • 2016年5月20日,允许向Mac应用商店提交软件包。
  • 2016年8月2日,支持Windows商店。

在最新的稳定版本V3.x中,Electorn集成了Nodejs v10.2.0和内核为v66.0.3359.181的Chromium

基于Electron实现的软件

Electron现已被多个开源应用软件所使用,其中被广大程序员所熟知和使用的Atom和VsCode编辑器就是基于Electron实现的。尝试打开VsCode,点击帮助菜单中的切换开发人员工具,可以在界面上看到我们熟悉的Chrome devtool,如下图

前端Electron新手入门教程详解

底层实现

由于应用场景是在系统平台上开发应用,所以我们开发时需要有能调用原生系统api的能力。为了能让前端语言能跟底层可以交互,Electron集成了Nodejs+Chromium。Nodejs主要负责应用程序主线程逻辑控制、底层交互等功能,Chromium主要负责渲染线程窗口的业务逻辑。主要的架构如下图:

前端Electron新手入门教程详解

这样的架构让单独升级Chromium版本成为可能。假设你的程序当前使用的是Electron v3.x的版本,这个版本的Electron所带的Chromium是66版本。这时如果你用的某些特性必须要使用Chromium 69版本,除了整体升级Electron到指定最新版本外,你还可以单独的对Chromium版本进行升级。

但是一般情况我们不建议这么做,因为成功的升级需要你具备C和C++相关的知识,并且对Chromium的底层实现具有一定的了解。即使你成功升级了Chromium的版本,但是对于软件整体的稳定性是无法保证的。

为什么要用

以Windows平台为例,大部分人会首先想到使用QT(C++),WPF(C#) 等语言去开发应用。不可否认的是,这些已经是非常成熟的开发方案了。但是,我们来看下如下两种场景:

  • 公司要做个全新的APP,但是技术人员构成大部分都是前端开发
  • 公司原本就有在线的web应用,但是想包个壳能在桌面直接打开,同时增加一些与系统交互的功能

对于第一种场景,团队中开发人员对于C++和C#并不熟悉,虽然可以现学,但是整个项目的技术管理和项目管理就会变得不可控。

对于第二种场景,对于应用的业务逻辑要求并不多,只是套一个具有浏览器的运行环境,单独为此配置一个C++、C#开发人员划不来。

对于这两种情况,如果现有的前端开发人员能直接搞定,那就非常完美了。

Electron的诞生提供了这种可能性。它可以帮助前端开发者在不需要学习其他语言和技能的前提下,快速开发跨平台的桌面应用。

怎么用

在后面的章节中,我们会根据主要的知识点并辅以实际案例来具体讲解如何使用Electron进行开发。这里我们只简单的介绍下如何使用Electron写一个经典的Hello World。

首先,新建一个目录,初始化npm

mkdir helloword
npm init

修改package.json文件,增加npm run start命令

{
"name": "electron demo",
"version": "1.0.0",
"description": "",
"main": "main.js", //修改为main.js
"scripts": {
"start": "electron ." //增加start命令
},
"author": "",
"license": "ISC",
"dependencies": {
"electron": "^3.0.10"
}
}

通过npm安装Electron

npm i electron --save-dev

在根目录创建main.js和index.html

main.js

const { app, BrowserWindow } = require('electron')
function createWindow () { 
// 创建浏览器窗口
win = new BrowserWindow({ width: 800, height: 600 })
// 然后加载应用的 index.html。
win.loadFile('index.html')
}
app.on('ready', createWindow)

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>

到这里,我们所有的准备工作都完成了,接下来就是运行它!

npm run start

看看效果

前端Electron新手入门教程详解

关于Electron的简单介绍就到这里为止,想必大家已经对Electron有了一些初步的认识。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Array.slice()与Array.splice()的返回值类型
Oct 09 Javascript
jquery validate.js表单验证的基本用法入门
May 13 Javascript
javascript 从if else 到 switch case 再到抽象
Jul 17 Javascript
jQuery中的val()示例应用
Feb 26 Javascript
Web表单提交之disabled问题js解决方法
Jan 13 Javascript
jquery实现弹出层效果实例
May 19 Javascript
javascript背景时钟实现方法
Jun 18 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
Nov 23 Javascript
详解JavaScript树结构
Jan 09 Javascript
js生成word中图片处理方法
Jan 06 Javascript
微信小程序scroll-view点击项自动居中效果的实现
Mar 25 Javascript
基于JavaScript实现控制下拉列表
May 08 Javascript
javascript实现自由编辑图片代码详解
Jun 21 #Javascript
JS中超越现实的匿名函数用法实例分析
Jun 21 #Javascript
微信小程序实现圆形进度条动画
Nov 18 #Javascript
JavaScript迭代器的含义及用法
Jun 21 #Javascript
js事件触发操作实例分析
Jun 21 #Javascript
微信小程序实现下拉刷新动画
Jun 21 #Javascript
vue elementUI使用tabs与导航栏联动
Jun 21 #Javascript
You might like
PHP 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
解决cPanel无法安装php5.2.17
2014/06/22 PHP
php操作MongoDB类实例
2015/06/17 PHP
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
深入解析contentWindow, contentDocument
2013/07/04 Javascript
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
2014/09/26 NodeJs
Javascript基础教程之JavaScript语法
2015/01/18 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
小程序获取周围IBeacon设备的方法
2018/10/31 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
Python使用matplotlib实现在坐标系中画一个矩形的方法
2015/05/20 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
python爬虫框架talonspider简单介绍
2017/06/09 Python
浅谈Python 的枚举 Enum
2017/06/12 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
Python常见反爬虫机制解决方案
2020/06/01 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
运动服饰每月订阅盒:Ellie
2018/04/29 全球购物
如何查询Oracle数据库中已经创建的索引
2013/10/11 面试题
医药学专业大学生职业生涯规划书论文
2014/01/21 职场文书
安全教育感言
2014/03/04 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
Python Numpy库的超详细教程
2022/04/06 Python