Electron 教程:从背景到 Vue3 桌面应用开发

​1. Electron 背景介绍​​

Electron 是一个开源框架,由 ​​GitHub​ ​ 开发(最初为 ​​Atom 编辑器​ ​ 项目构建),允许开发者使用 ​​Web 技术(HTML、CSS、JavaScript)​ ​ 构建 ​​跨平台桌面应用程序​​。

​​1.1 起源与发展​​

  • ​2013年​ :最初名为 ​Atom Shell​ ,是 GitHub 为其代码编辑器 ​Atom​ 开发的底层框架。
  • ​2015年​ :更名为 ​Electron​ ,并开源,迅速被 ​Slack、Visual Studio Code、Discord​ 等知名应用采用。
  • ​2022年​ :底层升级至 ​Chromium 106​ 和 ​Node.js 16.16.0​ ,并支持 ​Windows 沉浸式黑暗模式​ 等新特性。

​​1.2 核心特点​​

✅ ​​跨平台​ ​:一套代码可运行在 ​​Windows、macOS、Linux​ ​ 上。

✅ ​​Web 技术驱动​ ​:使用 ​​HTML、CSS、JavaScript​ ​ 构建 UI,无需学习 C++/Objective-C/Java。

✅ ​​Chromium + Node.js​​:

  • ​Chromium​ 提供现代化的 Web 渲染引擎(支持最新 Web API)。
  • ​Node.js​ 允许访问 ​文件系统、网络、原生 API​ 等底层功能。
    ✅ ​生态丰富​:
  • 支持 ​自动更新、打包安装(NSIS、DMG、AppImage)​。
  • 被 ​VS Code、Figma、Trello Desktop​ 等流行应用使用。

​​2. Electron 架构​​

Electron 应用由两个核心进程组成:

​​2.1 主进程(Main Process)​​

  • ​作用​:控制应用生命周期(启动、退出)、创建窗口、管理原生功能(菜单、对话框)。
  • ​运行环境​:Node.js + Electron API。
  • ​关键模块​ :
    • app(控制应用事件)
    • BrowserWindow(创建窗口)
    • dialog(文件/消息对话框)
    • ipcMain(与渲染进程通信)

​​2.2 渲染进程(Renderer Process)​​

  • ​作用​ :负责 ​UI 渲染​(HTML/CSS/JS),类似浏览器标签页。
  • ​运行环境​:Chromium(支持 Web 技术) + 可选 Node.js(需配置)。
  • ​关键模块​ :
    • ipcRenderer(与主进程通信)
    • fetch / XMLHttpRequest(网络请求)

​​🔗 进程通信(IPC)​ ​:

主进程和渲染进程通过 ​​ipcMain 和 ipcRenderer​​ 进行数据交换。


​​3. 环境搭建(Vue3 + Electron)​​

​​3.1 创建 Vue3 项目​​

javascript 复制代码
# 使用 Vite 创建 Vue3 项目
npm create vite@latest my-vue-electron-app -- --template vue
cd my-vue-electron-app
npm install

​​3.2 安装 Electron 依赖​​

javascript 复制代码
# 安装 Electron(开发依赖)
npm install electron --save-dev

# 安装 electron-builder(打包工具)
npm install electron-builder --save-dev

​​3.3 项目结构​​

复制代码
my-vue-electron-app/
├── package.json
├── vite.config.js
├── src/          # Vue3 前端代码
├── main.js       # Electron 主进程
├── preload.js    # 预加载脚本(安全 IPC 通信)
└── index.html    # Electron 渲染进程入口(可选)

​​4. 配置 Electron 主进程​​

​​4.1 创建 main.js(主进程)​​

在项目根目录创建 main.js,用于控制 Electron 窗口和 Vue3 应用:

javascript 复制代码
const { app, BrowserWindow } = require('electron');
const path = require('path');

function createWindow() {
  const win = new BrowserWindow({
    width: 1200,
    height: 800,
    webPreferences: {
      nodeIntegration: false, // 禁用 Node.js 集成(安全考虑)
      contextIsolation: true, // 启用上下文隔离
      preload: path.join(__dirname, 'preload.js'), // 预加载脚本
    },
  });

  // 开发环境加载 Vite 开发服务器
  if (process.env.NODE_ENV === 'development') {
    win.loadURL('http://localhost:5173');
    win.webContents.openDevTools(); // 打开 DevTools(可选)
  } else {
    // 生产环境加载打包后的 Vue3 应用
    win.loadFile(path.join(__dirname, '../dist/index.html'));
  }
}

// Electron 初始化完成后创建窗口
app.whenReady().then(createWindow);

// 所有窗口关闭时退出应用(macOS 除外)
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit();
});

// macOS 点击 Dock 图标时重新创建窗口
app.on('activate', () => {
  if (BrowserWindow.getAllWindows().length === 0) createWindow();
});

​​4.2 创建 preload.js(预加载脚本)​​

用于安全地暴露 IPC 通信 API 给 Vue3 渲染进程:

javascript 复制代码
const { contextBridge, ipcRenderer } = require('electron');

contextBridge.exposeInMainWorld('electronAPI', {
  // 示例:发送消息到主进程
  sendMessage: (message) => ipcRenderer.send('message-from-vue', message),
  // 示例:接收主进程消息
  onMessage: (callback) => ipcRenderer.on('message-from-main', (event, data) => callback(data)),
});

​​5. 配置 Vue3 与 Electron 通信​​

​​5.1 在 Vue3 组件中使用 IPC​​

在 Vue3 组件(如 src/App.vue)中调用 Electron API:

javascript 复制代码
<template>
  <div>
    <h1>Vue3 + Electron 桌面应用</h1>
    <button @click="sendMessageToElectron">发送消息给 Electron</button>
    <div v-if="messageFromElectron">
      <p>来自 Electron 的消息: {{ messageFromElectron }}</p>
    </div>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue';

const messageFromElectron = ref('');

// 发送消息到 Electron 主进程
const sendMessageToElectron = () => {
  window.electronAPI.sendMessage('Hello from Vue3!');
};

// 接收来自 Electron 的消息
onMounted(() => {
  window.electronAPI.onMessage((data) => {
    messageFromElectron.value = data;
  });
});
</script>

​​5.2 在 main.js 中处理 IPC 消息​​

修改 main.js,让 Electron 主进程接收并回复 Vue3 的消息:

javascript 复制代码
const { ipcMain } = require('electron');

// 监听来自 Vue3 的消息
ipcMain.on('message-from-vue', (event, message) => {
  console.log('来自 Vue3 的消息:', message);
  // 回复消息给 Vue3
  event.sender.send('message-from-main', 'Electron 收到你的消息了!');
});

​​6. 打包 Vue3 + Electron 应用​​

​​6.1 修改 package.json​​

javascript 复制代码
{
  "name": "my-vue-electron-app",
  "version": "1.0.0",
  "main": "main.js", // Electron 主进程入口
  "scripts": {
    "dev": "vite", // 启动 Vue3 开发服务器
    "build": "vite build", // 打包 Vue3 前端
    "electron:dev": "concurrently \"npm run dev\" \"wait-on http://localhost:5173 && electron .\"", // 开发模式(Vue3 + Electron)
    "electron:build": "npm run build && electron-builder" // 打包生产版本
  },
  "devDependencies": {
    "electron": "^28.0.0",
    "electron-builder": "^24.0.0",
    "concurrently": "^8.0.0",
    "wait-on": "^7.0.0"
  },
  "build": {
    "appId": "com.example.vue-electron",
    "productName": "Vue3 Electron App",
    "win": { "target": "nsis" }, // Windows 安装包
    "mac": { "target": "dmg" },   // macOS 安装包
    "linux": { "target": "AppImage" } // Linux 安装包
  }
}

​​6.2 运行 & 打包​​

​​(1)开发模式(Vue3 + Electron 同时运行)​​
复制代码
npm run electron:dev
​​(2)打包生产版本​​
复制代码
npm run electron:build

✅ ​​输出​ ​:dist/ 文件夹包含 ​​Windows .exe、macOS .dmg、Linux .AppImage​​ 安装包。


​​7. 总结​​

步骤 说明
​​1. 背景​​ Electron = Web 技术(Vue3) + 桌面应用(Chromium + Node.js)
​​2. 架构​​ ​​主进程​ ​(管理窗口) + ​​渲染进程​​(Vue3 UI)
​​3. 环境​​ npm install electron electron-builder
​​4. 主进程​​ main.js 控制窗口,preload.js 安全 IPC
​​5. Vue3 通信​​ window.electronAPI 调用 Electron API
​​6. 打包​​ electron-builder 生成 .exe / .dmg / .AppImage

🚀 ​​下一步​ ​:尝试集成 ​​数据库、文件管理、或调用原生 API​ ​!

📚 ​​官方文档​ ​:https://www.electronjs.org/docs


​​💡 提示​​:

  • ​开发时​ :用 electron:dev 同时运行 Vue3 和 Electron。
  • ​生产时​ :用 electron:build 打包成安装包。
  • ​安全​ :禁用 nodeIntegration,使用 preload.js + contextBridge。
相关推荐
kyriewen15 分钟前
我逐个测了 JSON.stringify 的 7 个坑:第 1 个就在丢数据
前端·javascript·程序员
积流成海42 分钟前
用代码实现哈希计算器:Web Crypto API 实战
前端·算法·哈希算法·哈希函数·盘子工具站
data analyse 4561 小时前
服务端访问日志聚合 PV 与 UV 怎么实现?日志采集与口径设计
大数据·前端·数据分析
song5011 小时前
React Native for OpenHarmony 实战:三方库 react-native-ratings 的鸿蒙化适配指南
javascript·react native·react.js·分类·harmonyos
JavaGuide1 小时前
DeepSeek Harness 重磅更新,Codex、Claude Code 子智能体进官方插件列表了,还有 Git 工作树和思考翻译!
前端·后端
小羊没烦恼!1 小时前
OS X 上使用.NET开发应用程序
开发语言·前端·数据库·人工智能·c#·策略模式
朱包林1 小时前
iTerm2终端配置指南
linux·javascript·python·云原生·容器·kubernetes·云计算
谢亮_vipxieliang2 小时前
JavaScript this 指向完全指南:调用位置决定一切
开发语言·javascript·ecmascript
Eiceblue2 小时前
使用 Python 实现 Excel 行列转置(保留单元格样式)
前端·python·excel
WeiXin_DZbishe2 小时前
基于Node.js的马拉松赛事管理系统的设计与实现-计算机毕设 附源码【课程设计】90211
java·javascript·vue.js·python·php·课程设计