Electron是什么?
Electron是用來搭建跨平臺桌面(PC)端
應用程序的框架。
例如:VScode、有道云。。。很多都是基于Electron開發的。
Electron解決了什么?
1、一套代碼可以運行多個平臺。
Electron 兼容 Mac、Windows 和 Linux,一套代碼可以構建出三個平臺的應用程序。
2、開發簡單便捷,前端人員就可以獨立開發。
Electron 基于 Chromium 和 Node.js, 可以使用 HTML、CSS、JavaScript 便捷開發并構建應用。
3、系統底層C++插件
可以編譯成nodejs供Electron直接使用,非常方便。
Electron會用到哪些技術棧?
1、Electron:提供桌面端應用能力。
2、Nodejs:用于本地文件系統和操作系統,提供server能力。
3、html、css、javascript:可以使用React、Vue.....編譯后的文件。
4、打包工具:webpack、vite......
都是前端技術棧,唯一可以不同的是需要學習Electron。
廢話不多說,直接上代碼
本地環境
搭建Node環境即可
node -v
npm -v
注意:Electron
與Nodejs
的各自版本必須要對應,具體兩者對應版本見版本發布。
我們用Electron官方提供的最新穩定版本進行演示。
Electron 19.0.8
Node 16.14.2
Hello World
克隆運行代碼
git clone https://github.com/electron/electron-quick-start
cd electron-quick-start
npm install
npm start
main.js
main.js是應用的入口文件。里面包含了應用啟動完成、窗口創建等。
入口文件的配置在package.json中。
const {app, BrowserWindow} = require('electron')
const path = require('path')
function createWindow () {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
mainWindow.loadFile('index.html')
// mainWindow.webContents.openDevTools()
}
app.whenReady().then(() => {
createWindow()
app.on('activate', function () {
// 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 (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})
index.html
頁面的入口文件,按照前端的正常開發就可以。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'">
<link href="./styles.css" rel="stylesheet">
<title>Hello World!</title>
</head>
<body>
<h1>Hello World!</h1>
<p>窗口創建成功</p>
<!-- You can also require other files to run in this process -->
<script src="./renderer.js"></script>
</body>
</html>
BrowserWindow
桌面端開發主要呈現的是獨立窗口,用于加載頁面。而BrowserWindow就是用來窗口的API。
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
mainWindow.loadFile('index.html')
可以自定義設置窗口的寬度,實現窗口尺寸的調整(位置也可以調整,想見setBounds、setPosition)。
loadFile用于加載本地文件,也可以直接加載網絡地址,如:
mainWindow.loadURL('https://github.com');
如果想像瀏覽器那樣可以查看、調試運行的代碼,就打開DevTools。
mainWindow.webContents.openDevTools()
也可以直接在preload加載的文件中調用原生的能力(node.js與electron等)。
// preload.js
window.addEventListener('DOMContentLoaded', () => {
const replaceText = (selector, text) => {
const element = document.getElementById(selector)
if (element) element.innerText = text
}
for (const type of ['chrome', 'node', 'electron']) {
// 通過getElementById賦值process信息
replaceText(`${type}-version`, process.versions[type])
}
})