Electron快速入手-从环境搭建到程序打包
Electron是什么Electron是由Github开发的开源框架,它允许用户使用Web技术开发桌面端应用,现在Electron框架由OpenJS基金会进行维护。Electron = Chromium + Node.js + NativeAPIChrominu允许使用Web技术写UINode.js赋予Electron操作底层的能力NativeAPI提升了Electron的跨平台的能力,使其获得更
Electron是什么
Electron是由Github开发的开源框架,它允许用户使用Web技术开发桌面端应用,现在Electron框架由OpenJS基金会进行维护。
Electron = Chromium + Node.js + NativeAPI
Chrominu允许使用Web技术写UI
Node.js赋予Electron操作底层的能力
NativeAPI提升了Electron的跨平台的能力,使其获得更多的原生能力。
Wikipedia介绍
Electro(原名为Atom Shell)是GitHub开发的一个开源框架。它通过使用Node.js(作为后端)和Chromium的渲染引擎(作为前端)完成跨平台的桌面GUI应用程序的开发。Electron现已被多个开源Web应用程序用于前端与后端的开发,著名项目包括GitHub的Atom和微软的Visual Studio Code。
Electron的历史
2008年Chromium出现,2009年Node.js出现,在两者发展成熟之后,在2016年基于两者的Electron出现。由于Electron可以复用Web的UI,因此开发效率较高,适用于快速试错的场景领域。
如果需要同时开发web端和桌面端,可以考虑使用Electron.
基于Electron的大型应用有:Atom、stack、VSCode、WordPress、Whatsapp
Electron的最小组成
一个基础的Electron包含三个文件:
package.json(包体描述)
main.js(主进程)
index.html(图形用户界面)。
框架由Electron可执行文件(Windows中为electron.exe、macOS中为electron.app、Linux中为electron)提供。开发者可以自行添加标志、自定义图标、重命名或编辑Electron可执行文件。
Electron的架构
Electron程序是一个多进程程序一个Browser多个Render,进程之间通过IPC进行通信。Node.js的事件循环基于libuv,Chromium的事件循环基于message bump,将Node.js和Chromium集成到一起后。当Node.js的libuv事件发生以后,会通知Electron的主线程,当主线程收到通知之后,会转发给Chromium的MessageLoop;
各种UI框架对比
原生框架(MFC/GDI/C#/Objective-C)
性能优异、原生体验、包体积小、开发门槛高、迭代速度慢
QT
基于C++性能好、跨平台、包体积比原生大、开发门槛高、迭代速度一般
Flutter
Flutter的主要应用场景还在移动端,在PC端的应用还比较少,PC端生态建设很少
NW.js(Node-Webkit.js)
基于Web技术,性能一般,跨平台(Mac、Windows、Linux),v0.14.7支持XP。包体积比较大,源码加密,支持Chrome扩展。有不错的生态社区。微信开发者工具、钉钉都是基于NW.js开发的。
Electron
基于Web技术,性能一般,跨平台(Mac、Windows、Linux),不支持XP。包体积比较大,有活跃的社区。Atom、VSCode、WordPress等应用都是基于Electron开发的。
其它的小众UI框架还有:
CEF(也是基于Web技术的)
WPF(微软推出的用户界面框架)
PWA (Google 提出的用前沿的 Web 技术为网页提供 App 般使用体验的一系列方案)
搭建Electron开发环境
NVM安装
Mac/Linux:
curl -o- https://raw.githubusercontent.com/nvm.sh/nvm/v0.35.2/install.sh | bash
Windows:
https://github.com/coreybutler/nvm-windows/releases
Node.js/NPM安装
nvm install 12.14.0
npm -v \ node -v
//如果下载慢的话,也可以到官网去下载安装包安装
Electron安装
局部安装
npm install electron --save-dev
//下面的方式通过指定CPU和平台的方式进行安装
npm install --arch=ia32 --platform=win32 electron
全局安装electron
npm install -g electron
验证安装成功
electron -v
设置对应的景象可以加速Electron的下载安装
npm config set electron_mirror “https://npm.taobao.org/mirrors/electron/”
编写一个简单的Electron程序
electron进程间的关系图如下图所示,主要有主进程和渲染进程组成。
一个最小的electron程序单元由三个文件组成,一个html文件,一个renderer.js文件,一个main.js文件。html文件用来定义electron应用程序的界面,main.js文件用来定义启动程序的入口,renderer.js用来对html界面进行渲染,当然如果是静态界面不需要交互的话,renderer.js文件也可以省略。
index.html
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<body>
<h1>第一个electron应用</h1>
<input type="button" value="测试按钮"> </input>
</body>
</html>
main.js
const {app, BrowserWindow, Notification, ipcMain} = require('electron')
//主进程引入app、BrowserWindow、Notification、ipcMain模块
let win
//创建窗口
app.on('ready', () => {
win = new BrowserWindow({
width: 300,
height: 300,
webPreferences: {
nodeIntegration: true
}
})
//加载页面
win.loadFile('./index.html')
})
编写完对应的界面程序之后,就可以初始化项目了。在项目中执行下面的命令,对项目进行描述 :
npm init
输入对应的描述之后就会生成对应的包配置文件:
package.json
{
"name": "test-electron",
"version": "1.0.0",
"description": "测试electron",
"main": "main.js",
"scripts": {
"start": "electron .",
"packager": "electron-packager . test-electron --platform=win32 --arch=x64 --icon=icon.ico --out=./out --asar --app-version=0.0.1"
},
"keywords": [
"electron"
],
"author": "yangfeifei",
"license": "ISC",
"devDependencies": {
"electron": "^15.3.0"
}
}
Electron 运行和打包
启动命令
//提前安装局部依赖
npm install
假设此时你的分支中没有任何lock文件,当你执行npm install, npm会根据你在package.json中对各种依赖的定义去安装这些依赖。安装完之后,会产生两个结果:
- node_modules: 所有依赖包
- npm-lock.json: lock 文件精确描述了 node_modules 目录中所列出的目录的物理树,这个文件相当于是node_module产生的物理树的快照。
如果你在package.json脚本配置了start参数可以使用npm start进行启动,
如果没有配置对应的参数可以使用electron . 在当前目录启动,启动结果如下图所示:
安装electron-packager打包工具
npm install electron-packager -g
通过package.json进行打包 配置打包命令
"scripts": {
"start": "electron .",
"packager": "electron-packager . test-electron --platform=win32 --arch=x64 --icon=icon.ico --out=./out --asar --app-version=0.0.1"
}
//配置需要的electron 版本
"devDependencies": {
"electron": "^15.3.0"
}
启动打包
npm install //先安装依赖
npm run packager
通过cmd命令行打包
electron-packager . AppName --platform=win32 --arch=x64 --icon=computer.ico --out=./out --asar --app-version=0.0.1 --overwrite --ignore=node_modules --electron-version 5.0.0
参数说明
AppName:生成exe的名称
--platfrom=win32构建平台类型,还可以取:darwin,linux,mas,win32
--arch=x64决定使用x86还是x64还是两个架构都用
--icon=app.icon自定义应用的图标
--out=./out指定打包文件输出的位置
--asar:该参数可以不加,如果加上,打包之后应用的源码会以.asar格式存在
--app-version=0.0.1:生成应用的版本号
--overwrite:覆盖原有的
--ignore=node_modules:如果加上该参数,项目里node_modules模块不会被打包进去
--electron-version 5.0.0:指定当前要构建的electron的版本号,需要和当前的版本一致,不一致会下载对应的包。
打包成功之后对应的文件会输出到out目录下:
主程序一百多兆还是很大的
完成一系列的流程之后,就可以进行Electron程序开发了。当然如果想开发优秀的Electron程序,深厚的前端技术功底(JavaScript、html、css)还是必须的。
更多推荐
所有评论(0)