快速搭建
安装
pnpm install --save-dev electron
启动项目
javascript
"scripts": {
"start": "electron ."
}
集成 vite+vue3
pnpm create vite@latest my-vue-app
安装依赖
pnpm install
运行项目
pnpm run dev
安装 electron 相关包
安装 Electron-builder 打包工具
pnpm install electron-builder -D
安装 vite-plugin-electron 集成环境(支持渲染进程 import 转 require 导入,方便使用 Electron api 或者 node api)
pnpm install electron-builder -D
index.html 内容
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'" />
<meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; script-src 'self'" />
<title>Hello from Electron renderer!</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
<script src="./renderer.js"></script>
</html>
创建主渲染进程 electron/main.js
javascript
// 主进程
const { app, BrowserWindow } = require("electron");
const path = require("path");
const createWindow = () => {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, "preload.js"), // 预加载模块,electron推荐将一些需要在node环境中获取的数据提前放入预加载模块中
},
});
// 区分开发环境加载vite启动地址,打包环境加载本地dist目录
win.loadURL(
!app.isPackaged
? process.env.VITE_DEV_SERVER_URL
: `file://${path.join(__dirname, '../dist/index.html')}`
// 开发环境自动打开开发工具
if (!app.isPackaged) {
win.webContents.openDevTools()
}
};
// whenReady 避免了on的监听问题,处理了边界问题
// 只有在 app 模组的 ready 事件被触发后才能创建 BrowserWindows 实例
app.whenReady().then(() => {
createWindow();
// 如果没有窗口打开则打开一个窗口 (macOS)
// 与前二者相比,即使没有打开任何窗口,macOS 应用通常也会继续运行
app.on("activate", () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
});
// 关闭所有窗口时退出应用 (Windows & Linux)
// 在 Windows 和 Linux 上,我们通常希望在关闭一个应用的所有窗口后让它退出。
app.on("window-all-closed", () => {
if (process.platform !== "darwin") app.quit();
});
// 在这个文件中,你可以包含应用程序剩余的所有部分的代码,
// 也可以拆分成几个文件,然后用 require 导入。
新建预加载文件 electron/preload.js
javascript
// preload.js
// 所有Node.js API都可以在预加载过程中使用。
// 它拥有与Chrome扩展一样的沙盒。
window.addEventListener('DOMContentLoaded', () => {
const replaceText = (selector, text) => {
const element = document.getElementById(selector)
if (element) element.innerText = text
}
for (const dependency of ['chrome', 'node', 'electron']) {
replaceText(`${dependency}-version`, process.versions[dependency])
}
})
修改 vite.config.js
利用 vite-plugin-electron 设置 electron 启动路径以及预加载路径
javascript
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import * as path from "path";
import electron from "vite-plugin-electron";
const path = require('path')
export default defineConfig({
plugins: [
vue(),
electron({
main: {
entry: "electron-main/index.js", // 主进程文件
},
preload: {
input: path.join(__dirname, "./electron-preload/index.js"), // 预加载文件
},
}),
renderer:{}
],
});
修改 package.json
json
{
"main": "/electron/index.js",
"scripts": {
"dev": "vite",
"build": "vite build && electron-builder",
"preview": "vite preview"
},
"build": {
"appId": "com.your-website.your-app",
"productName": "ElectronApp",
"asar": true,
"copyright": "Copyright © 2022 ElectronApp",
"directories": {
"output": "release/${version}"
},
"files": ["dist/**/*", "electron/**/*"],
"mac": {
"artifactName": "${productName}_${version}.${ext}",
"target": ["dmg"]
},
"win": {
"target": [
{
"target": "nsis",
"arch": ["x64"]
}
],
"artifactName": "${productName}_${version}.${ext}"
},
"nsis": {
"oneClick": false,
"perMachine": false,
"allowToChangeInstallationDirectory": true,
"deleteAppDataOnUninstall": false
},
"publish": [
{
"provider": "generic",
"url": "http://127.0.0.1:8080"
}
],
"releaseInfo": {
"releaseNotes": "版本更新的具体内容"
}
}
}
electron-builder
配置项 https://www.electron.build/