React18构建Vite+Electron项目以及打包

一.先创建项目

javascript 复制代码
cnpm create vite

选择React => JavaScript =>cd react_vite => cnpm i =>npm run dev

二.安装Electron依赖

指定版本相对稳定

javascript 复制代码
cnpm i electron@19.0.10 -D
cnpm i vite-plugin-electron@0.9.3 -D
cnpm i electron-builder@23.0.1 -D

三.创建electron目录

创建electron/index.js electron文件夹与src同级

index.js:

javascript 复制代码
import { app, BrowserWindow, } from 'electron'
import path from "path"
let mainWin
const createWindow = () => {
    mainWin = new BrowserWindow({
        width: 800,
        height: 500,
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false
        }
    })
    if (process.env.NODE_ENV !== 'development') {
        mainWin.loadFile(path.join(__dirname, "../index.html"))
    } else {
        // VITE_DEV_SERVER_HOST 如果是undefined 换成  VITE_DEV_SERVER_HOSTNAME
        mainWin.loadURL(`http://${process.env['VITE_DEV_SERVER_HOSTNAME']}:${process.env['VITE_DEV_SERVER_PORT']}`)
    }
}

app.whenReady().then(createWindow)

四.配置vite.config.js与package.json

vite.config.js:

javascript 复制代码
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import electron from 'vite-plugin-electron'
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react(), electron({
    main: {
      // 置顶 electron 入口文件
      entry: "electron/index.js"
    }
  })],
})

package.json:

把 "type":"module" 删除掉,添加 "main": "dist/electron/index.js", 指定入口文件


运行项目:npm run dev


打包:修改package.json配置

"build": "vite build && electron-builder",

添加build配置

javascript 复制代码
{
  "name": "react_vite",
  "private": true,
  "version": "0.0.0",
  "main": "dist/electron/index.js",
  "scripts": {
    "dev": "vite",
    "build": "vite build && electron-builder",
    "preview": "vite preview"
  },
  "dependencies": {
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  },
  "devDependencies": {
    "@types/react": "^18.0.28",
    "@types/react-dom": "^18.0.11",
    "@vitejs/plugin-react": "^3.1.0",
    "electron": "^19.0.10",
    "electron-builder": "^23.0.1",
    "vite": "^4.2.0",
    "vite-plugin-electron": "^0.9.3"
  },
  "build": {
    "appId": "com.electron.desktop",
    "productName": "electron",
    "asar": false,
    "copyright": "Copyright © 2022 electron",
    "directories": {
      "output": "release/"
    },
    "files": [
      "dist"
    ],
    "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": "版本更新的具体内容"
    }
  }
}

npm run build

相关推荐
谢尔登8 分钟前
【React】 状态管理方案
前端·react.js·前端框架
用户9385156350725 分钟前
手把手教你实现一个 MCP 文件读取服务器:从协议到代码的深度解析
javascript·人工智能
用户21366100357227 分钟前
Vue商品详情与放大镜组件
前端·javascript
半个落月31 分钟前
从Tapas小Demo理清localStorage、事件与this
前端·javascript
用户9385156350731 分钟前
RAG 实战:从零搭建语义搜索系统,彻底告别关键词匹配的尴尬
javascript·人工智能
李明卫杭州32 分钟前
Vue2 中 v-model 处理不同数据结构的技巧
前端·javascript·vue.js
李明卫杭州37 分钟前
使用 computed 处理 v-model 复杂数据结构
前端·javascript·vue.js
丨我是张先生丨1 小时前
日语单词 Web Page
前端·css·css3
禅思院3 小时前
AI对话前端从入门到崩溃:一个长对话引发的五层优化战争【引子】
前端·面试·架构
TrisighT3 小时前
Electron 鸿蒙 PC 上点外链唤醒应用,我试了 6 种写法只有 1 种能跑
前端·electron·harmonyos