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 小时前
高中数学-数列-导数证明
前端·数学·算法
kingwebo'sZone8 小时前
C#使用Aspose.Words把 word转成图片
前端·c#·word
xjt_09018 小时前
基于 Vue 3 构建企业级 Web Components 组件库
前端·javascript·vue.js
我是伪码农8 小时前
Vue 2.3
前端·javascript·vue.js
夜郎king9 小时前
HTML5 SVG 实现日出日落动画与实时天气可视化
前端·html5·svg 日出日落
辰风沐阳9 小时前
JavaScript 的宏任务和微任务
javascript
夏幻灵10 小时前
HTML5里最常用的十大标签
前端·html·html5
冰暮流星10 小时前
javascript之二重循环练习
开发语言·javascript·数据库
Mr Xu_10 小时前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js
未来龙皇小蓝10 小时前
RBAC前端架构-01:项目初始化
前端·架构