我们在学习某一种技术之前,得先问几个问题:
当我们明白了以上几个问题之后,那就大概率算是基本掌握了这个技术,后面再要深入就要经过大量的项目实践和源码原理的研究了。
我本人也是做个好几个基于electron+react的项目了。在做electron项目过程中也是踩了不少坑,学习了不少关于electron的知识。这篇文章主要是介绍electron基本概念和入门级的实践。
本文将从以下几个方面讲述electron的入门实践:
这里借用官方的一句话:
Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许 保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。
一图胜千言,简而言之Electron就等于谷歌浏览器+node+系统原生APIs
总结起来,Chromium 负责页面 UI 渲染,Node.js 负责业务逻辑,Native API 则提供原生能力和跨平台
Chromium 的多进程模式主要由三部分组成: 浏览器端(Browser)、渲染器端(Render)、浏览器与渲染器的通信方式(IPC)
1.浏览器进程
浏览器进程 Browser 只有一个,当 Chrome 打开时,进程启动。浏览器为每个渲染进程维护对应的 RenderProcessHost,负责浏览器与渲染器的交互。RenderViewHost 则是与 RenderView 对象进行交互,渲染网页的内容。浏览器与渲染器通过 IPC 进行通信。
2.渲染进程管理
每个渲染进程都有一个全局 RenderProcess 对象,可以管理其与父浏览器进程之间的通信,并维护其全局状态。
3.view 管理
每个渲染器可以维护多个 RenderView 对象,当新开标签页或弹出窗口后,渲染进程就会创建一个 RenderView,RenderView 对象与它在浏览器进程中对应的 RenderViewHost 和 Webkit 嵌入层通信,渲染出网页网页内容(这里是我们日常主要关注的地方)。
Electron 的应用场景非常广泛,以下是一些常见的 Electron 应用场景:
总之,Electron 的应用场景非常广泛,适用于各种类型的桌面应用程序开发,包括编辑器、开发工具、通讯工具、音乐播放器、媒体应用和游戏等。它的跨平台特性和丰富的功能使得开发者能够快速构建出功能丰富、可扩展的桌面应用程序。
总之, 开发者需要根据自己的需求和应用场景来选择是否使用该框架。如果 需要构建跨平台的应用程序,并且需要快速迭代和定制化功能,那么 Electron 可能是一个不错的选择。
当然是先安装啦
npm install --save-dev electron
yarn add --dev electron
然后用npm创建工程化项目
npm init
添加脚本命令
{
"scripts": {
"start": "electron ."
}
}
创建main.js
const { app, BrowserWindow } = require('electron')
const path = require('node:path')
const createWindow = () => {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
// 加载 index.html
mainWindow.loadFile('index.html')
// 打开开发工具
// mainWindow.webContents.openDevTools()
}
// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
createWindow()
app.on('activate', () => {
// 在 macOS 系统内, 如果没有已开启的应用窗口
// 点击托盘图标时通常会重新创建一个新窗口
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
// 除了 macOS 外,当所有窗口都被关闭的时候退出程序。 因此, 通常
// 对应用程序和它们的菜单栏来说应该时刻保持激活状态,
// 直到用户使用 Cmd + Q 明确退出
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit()
})
// 在当前文件中你可以引入所有的主进程代码
// 也可以拆分成几个文件,然后用 require 导入。
以下是几个常用的 Electron 脚手架,可以帮助快速开始 Electron 应用程序的开发:
这些脚手架都有活跃的社区支持和文档, 可以根据自己的需求选择最适合 的脚手架进行开发。无论 是使用原生 JavaScript、React、Vue.js 还是其他前端框架,都可以找到相应的 Electron 脚手架来帮助 快速启动项目。