Vite+React+Electron开发入门,10分钟搭建本地环境并打包

前言

想使用vite和react开发跨平台桌面的软件方案有electron和tauri两种,但是我个人更喜欢tauri,无奈electron名声大燥,面试要求里很多都写着:electron...可见这类公司多么落后。但是呢,又秉持着存在即合理的理念,electron也有自己的优势,所以今天就来体验一下吧

整体步骤分为四个

安装环境,修改配置,本地启动调试,打包发布。让你十分钟之内熟悉整个流程。

第一步,安装环境

需要node环境,至少14以上,假装你已经有了。推荐使用nvm管理多版本node。

然后安装vite环境:Vite | 下一代的前端工具链

然后使用vite创建一个react或者vue程序:

lua 复制代码
yarn create vite

按照提示选择react或者vue:

创建完成后,进入项目并安装依赖:

然后安装electron依赖:

sql 复制代码
yarn add concurrently electron cross-env -D

安装electron打包依赖:并创建打包配置文件

css 复制代码
yarn add --dev @electron-forge/cli
npx electron-forge import

执行完npx electron-forge import后,你的项目根目录会出现一个forge.config.js文件:

第二步,修改配置

当依赖安装完成后,我们修改package.json文件,添加打包脚本:

arduino 复制代码
  "scripts": {
    "start": "npm run build && npm run electron:start",
    "dev": "concurrently -k "vite" "npm run electron:dev"",
    "build": "vite build",
    "preview": "vite preview",
    "electron:start": "cross-env IS_DEV=false electron-forge start",
    "electron:dev": "cross-env IS_DEV=true electron-forge start",
    "package": "electron-forge package",
    "make": "electron-forge make"
  },

还需要在package.json的script同级添加几个配置:

arduino 复制代码
  "main": "app/index.js",
  "description": "electron-vite-react",
  "license": "MIT",
  "author": {"name": "1024小神", "email": "15670339118@163.com"},
  "scripts": {
    "start": "npm run build && npm run electron:start",
    "dev": "concurrently -k "vite" "npm run electron:dev"",
    "build": "vite build",
    "preview": "vite preview",
    "electron:start": "cross-env IS_DEV=false electron-forge start",
    "electron:dev": "cross-env IS_DEV=true electron-forge start",
    "package": "electron-forge package",
    "make": "electron-forge make"
  },

并且删除一个配置:"type": "module",因为这个配置会导致你启动失败和打包失败等各种问题:Error [ERR_REQUIRE_ESM]: require() of ES Module

然后创建electron的启动文件:创建一个app目录,添加index.js,内容如下:

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

if (require('electron-squirrel-startup')) {
  app.quit()
}

const isDev = process.env.IS_DEV === 'true'

function createWindow() {
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600
  })
  if (isDev) {
    mainWindow.loadURL('http://localhost:5173')
    mainWindow.webContents.openDevTools()
  } else {
    mainWindow.loadFile(path.join(__dirname, '../dist', 'index.html'))
  }
}

app.whenReady().then(() => {
  createWindow()
  app.on('activate', function () {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow()
    }
  })
})

app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

第三步,本地启动

不出意外的话,你执行 yarn run dev 就会成功执行了

第四步,打包发布

此时记得修改vite打包配置: base: "./" ,不然打包后的程序打开可能是白屏,因为他们加载不到js文件,需要设置一下路径就可以了

javascript 复制代码
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react()],
  base: './'
})

打包后会有一个out文件夹: 双击即可打开,只是打出来的包太大了吧,158M,,,,,(tauri只有3M不到,这就是差距啊,发誓不用electron!)

然后正常运行:

相关推荐
却尘6 天前
Server Actions 深度剖析(2):缓存管理与重新验证,如何用一行代码干掉整个客户端状态层
前端·客户端·next.js
程序员老刘8 天前
Google突然“变脸“,2026年要给全球开发者上“紧箍咒“?
android·flutter·客户端
Lei活在当下9 天前
【业务场景架构实战】1. 多模块 Hilt 使用原则和环境搭建
性能优化·架构·客户端
万少14 天前
可可图片编辑 HarmonyOS(3)应用间分享图片
前端·harmonyos·客户端
程序员老刘18 天前
Dart MCP翻车了!3.9.0版本无法运行,这个坑你踩过吗?
flutter·ai编程·客户端
程序员老刘19 天前
Cursor vs Claude Code vs AS+AI助手:谁才是客户端的编程神器?
flutter·ai编程·客户端
麦客奥德彪25 天前
React native 项目函数式编程的背后-另类的架构InversifyJS 依赖注入(DI)
react native·架构·客户端
fouryears_234171 个月前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
程序员老刘1 个月前
Flutter 3.35 更新要点解析
flutter·ai编程·客户端
红橙Darren1 个月前
手写操作系统 - 编译链接与运行
android·ios·客户端