将 Vite 与 Electron 结合使用,能够让我们构建现代化的桌面应用程序,并享受极速的开发体验。Vite 提供了极速的开发服务器和构建工具,而 Electron 则帮助我们创建跨平台的桌面应用。下面是一份详尽的指南,将一步步引导我们完成 Vite 与 Electron 的配置,包括完整的搭建流程和代码示例。
这份指南将带我们了解如何搭建一个基于 Vite 的 Electron 应用,使我们能够利用 Web 技术来创建现代化的桌面程序。我们将学习如何初始化一个 Vite 项目,如何配置 Electron 的主进程,以及如何创建一个简单的 HTML 组件。具体的步骤涵盖了安装依赖、配置构建设置以及在开发模式下运行应用程序。在完成这些步骤后,我们将得到一个基础的 Electron 应用,它会在屏幕上显示一条简单的问候信息。
目录
创建 Vite 应用并在 Electron 中使用 Vite 的步骤
第 1 步:创建 Vite 项目
- 首先,我们需要创建一个新的 Vite 项目。打开终端并运行:
npm create @quick-start/electron@latest
- 然后,选择以下选项:
Project name:my-electron-app
Need to install the following packages:
@quick-start/[email protected]
Ok to proceed? (y) y
√ Project name: ... my-app-electron
√ Select a framework: » vue
√ Add TypeScript? ... No / Yes
√ Add Electron updater plugin? ... No / Yes
√ Enable Electron download mirror proxy? ... No / Yes
项目结构:
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20240925161606/electronprojectstructure.png">electronprojectstructure项目结构
第 2 步:进入项目目录
- 让我们移动到新创建的项目目录中:
cd my-electron-app
第 3 步:安装依赖
- 安装 Vite 和 Electron 所需的必要依赖:
npm install
- 更新后的依赖:
"dependencies": {
"@electron-toolkit/preload": "^3.0.1",
"@electron-toolkit/utils": "^3.0.0"
},
"devDependencies": {
"@electron-toolkit/eslint-config": "^1.0.2",
"@rushstack/eslint-patch": "^1.10.3",
"@vitejs/plugin-vue": "^5.0.5",
"@vue/eslint-config-prettier": "^9.0.0",
"electron": "^31.0.2",
"electron-builder": "^24.13.3",
"electron-vite": "^2.3.0",
"eslint": "^8.57.0",
"eslint-plugin-vue": "^9.26.0",
"prettier": "^3.3.2",
"vite": "^5.3.1",
"vue": "^3.4.30"
}
第 4 步:创建 Electron 主文件
- 在项目根目录下创建一个名为 main.js 的新文件。该文件将包含 Electron 的主进程代码:
// src/rendere/src/main.js
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‘),
contextIsolation: true,
},
});
// 如果需要,请调整端口号
mainWindow.loadURL(‘http://localhost:3000‘);
}
app.whenReady().then(createWindow);
app.on(‘window-all-closed‘, () => {
if (process.platform !== ‘darwin‘) app.quit();
});
app.on(‘activate‘, () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
第 5 步:更新 Vite 配置
- 更新 vite.config.js 文件,以确保 Electron 能正确找到构建后的文件。请确保其中包含 Vite 的构建配置。
// vite.config.js
import { defineConfig } from ‘vite‘;
export default defineConfig({
build: {
outDir: ‘dist‘,
emptyOutDir: true,
},
});
第 6 步:更新 package.json 脚本
- 修改 package.json 中的 scripts 部分,加入用于构建和运行应用程序的命令:
"scripts": {
"dev": "vite",
"build": "vite build",
"start": "electron ."
}
第 7 步:创建一个简单的组件
- 我们可以创建一个简单的 HTML 组件来显示文本。修改你的 index.html 文件:
Vite + Electron
Hello, Electron with Vite!
第 8 步:运行应用程序
- 首先,启动 Vite 开发服务器:
npm run dev
- 接着,在新的终端窗口中,启动 Electron 应用:
npm run start
输出结果:
!file输出结果
2026年开发体验升级:AI 驱动的工程化实践
在我们最近的一个项目中,我们意识到单纯地配置工具已经不足以应对现代软件开发的复杂性。随着 2026 年的到来,Vibe Coding(氛围编程) 和 Agentic AI 正在重塑我们的开发工作流。当我们搭建 Electron + Vite 项目时,我们不再只是编写代码,而是在与 AI 结对编程。让我们深入探讨如何将先进理念融入技术栈中。
引入 Agentic AI 进行自动化配置
你可能已经注意到,手动配置 vite.config.js 和 Electron 的主进程虽然灵活,但在大型团队中容易产生配置漂移。在我们的生产环境中,我们开始使用 Agentic AI 代理 来监控并同步这些配置文件。这不仅能确保环境一致性,还能自动优化构建参数。
例如,我们可以编写一个简单的脚本,利用 AI 分析当前的依赖树并自动建议优化方案:
// scripts/analyze-deps.js
// 这是一个概念性示例,展示了如何利用 AI 逻辑分析依赖
import { execSync } from ‘child_process‘;
import fs from ‘fs‘;
function analyzeDependencies() {
// 获取当前依赖列表
const packageJson = JSON.parse(fs.readFileSync(‘./package.json‘, ‘utf-8‘));
const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };
console.log(‘🤖 AI Agent: 正在分析依赖项的安全性及版本兼容性...‘);
// 模拟 AI 决策过程
Object.keys(deps).forEach(key => {
if (key.includes(‘electron‘) && !key.includes(‘toolkit‘)) {
console.warn(`⚠️ 检测到 Electron 核心依赖,建议确保沙箱模式已开启。`);
}
});
console.log(‘✅ 分析完成:当前配置符合 2026 年最佳安全实践。‘);
}
analyzeDependencies();
LLM 驱动的调试与实时协作
在开发过程中,遇到 Electron 渲染进程崩溃或白屏问题是家常便饭。传统方法是我们需要手动挖掘 chrome://logs。但在 2026 年,我们可以集成 LLM 驱动的调试工具。
让我们想象这样一个场景:你的 Vite 开发服务器热更新(HMR)失败了。以前你会去 Stack Overflow 搜索,现在,你可以直接将报错日志喂给本地的 AI 模型。它会根据上下文(即你的 INLINECODE5d4c8ca7 和 INLINECODE39df0d61)直接给出修复补丁。
为了实现这一点,我们通常会在项目中添加一个“诊断钩子”:
// src/utils/diagnostic-hook.js
export function initAIDiagnostics() {
window.addEventListener(‘error‘, (event) => {
const errorPayload = {
message: event.message,
source: event.filename,
stack: event.error?.stack,
userAgent: navigator.userAgent,
timestamp: new Date().toISOString()
};
// 在实际应用中,这里会发送到 AI 分析端点
console.log(‘🚀 发送错误报告至 AI Agent:‘, errorPayload);
// 模拟 AI 建议反馈
// "检测到模块解析错误,建议检查 vite.config.base 配置"
});
}
架构深度解析:从单文件到多进程的进阶之路
仅仅运行起一个“Hello World”是不够的。在构建企业级桌面应用时,我们必须深入理解 Electron 的多进程架构与 Vite 的模块化系统如何交织在一起。
进程间通信(IPC)的安全与性能
在 2026 年,安全左移 是不可妥协的原则。我们在配置 INLINECODE2b4f1a94 时,必须同时考虑 INLINECODEe51e28df 和 nodeIntegration 的权衡。以下是我们如何在保证安全的前提下,利用 Preload 脚本桥接主进程与渲染进程:
// preload.js
// 这个脚本运行在具有特权但无法访问 DOM 的沙箱环境中
const { contextBridge, ipcRenderer } = require(‘electron‘);
// 我们通过 contextBridge 暴露一个安全的 API 给渲染进程
contextBridge.exposeInMainWorld(‘electronAPI‘, {
// 封装 invoke 方法,避免渲染进程直接访问 ipcRenderer
getVersion: () => ipcRenderer.invoke(‘get-app-version‘),
// 监听事件,并提供返回值清理功能,防止内存泄漏
onUpdateAvailable: (callback) => ipcRenderer.on(‘update-available‘, callback)
});
对应的,在主进程中我们会这样处理:
// main.js (更新版)
const { app, BrowserWindow, ipcMain } = require(‘electron‘);
const path = require(‘path‘);
function createWindow() {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, ‘preload.js‘), // 关键:注入预加载脚本
contextIsolation: true, // 强烈推荐:开启上下文隔离
nodeIntegration: false, // 安全最佳实践:禁用 Node 集成
},
});
mainWindow.loadURL(‘http://localhost:3000‘);
}
// IPC 事件处理:仅暴露必要的操作
ipcMain.handle(‘get-app-version‘, () => {
return app.getVersion();
});
app.whenReady().then(createWindow);
构建优化与资源管理
Vite 的生产构建非常出色,但在 Electron 环境下,我们需要特别注意资源的加载路径。由于 Electron 使用 INLINECODEefd3701c 协议加载打包后的文件,如果不正确配置 Vite 的 INLINECODE826d787d 选项,你会发现资源加载 404。
我们通常在生产构建脚本中动态处理这个问题:
// vite.config.js (生产级配置)
import { defineConfig } from ‘vite‘;
import vue from ‘@vitejs/plugin-vue‘;
export default defineConfig(({ mode }) => {
// 在 Electron 中,base 必须设置为 ‘./‘ 以确保相对路径正确
const base = mode === ‘production‘ ? ‘./‘ : ‘/‘;
return {
base,
plugins: [vue()],
build: {
outDir: ‘dist‘,
emptyOutDir: true,
// 针对 Electron 优化 Rollup 选项
rollupOptions: {
output: {
// 分块策略:将第三方库分离成单独的 chunk
manualChunks(id) {
if (id.includes(‘node_modules‘)) {
return ‘vendor‘;
}
}
}
}
},
// 确保 Vite 能够正确处理 Electron 的 Node 模块
resolve: {
alias: {
‘@‘: path.resolve(__dirname, ‘src‘),
}
}
};
});
生产环境最佳实践与常见陷阱
在我们多年的实战经验中,我们遇到过无数次“明明在开发环境好好的,打包后就崩溃”的情况。让我们总结一下 2026 年构建高稳定性 Electron 应用的关键策略。
常见陷阱:加载白屏问题
你可能会遇到这样的情况:打包后的应用启动后只有一个白屏。这通常是因为 INLINECODEd26bcd07 仍然指向 INLINECODE5e73800b 或者文件路径错误。
解决方案:
在生产环境中,我们需要动态判断协议。我们通常会在 main.js 中加入环境检测逻辑:
// src/main/index.js (生产环境优化版)
const { app, BrowserWindow } = require(‘electron‘);
const path = require(‘path‘);
const isDev = !app.isPackaged; // app.isPackaged 在打包后为 true
function createWindow() {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, ‘../preload/index.js‘), // 注意路径调整
contextIsolation: true,
nodeIntegration: false,
},
});
if (isDev) {
// 开发环境:加载 Vite 开发服务器
mainWindow.loadURL(‘http://localhost:5173‘);
mainWindow.webContents.openDevTools();
} else {
// 生产环境:加载打包后的 index.html
mainWindow.loadFile(path.join(__dirname, ‘../renderer/index.html‘));
}
}
性能优化与可观测性
现代应用需要极强的可观测性。我们不应该等到用户报错才知道应用卡死。通过集成 Sentry 或 Crashlytics,我们可以监控 Electron 的主进程和渲染进程健康状态。
此外,为了提升启动速度,我们建议:
- 延迟加载非关键模块:不要在主进程启动时立即加载所有 IPC 处理程序。
- 利用 Vite 的预构建功能:确保
optimizeDeps配置正确,避免在启动时重新编译庞大的依赖库。
替代方案对比:何时不应使用 Electron?
虽然 Electron 功能强大,但在 2026 年,我们也必须客观评估其局限性。如果你的应用只需要极小的体积和极致的内存占用,或者是一个简单的状态栏工具,Tauri 或 Neutralino 可能是更好的选择。它们利用系统自带的 WebView,显著减少了内存占用。但如果你需要访问极其复杂的 Node.js 原生模块生态,或者对 Web 标准的兼容性有极高要求,Electron 依然是王道。
在这篇文章中,我们深入探讨了从基础搭建到 AI 辅助开发的完整流程。希望这些来自实战一线的经验能帮助你避开我们曾经踩过的坑,构建出属于未来的卓越桌面应用。