Electron + ts + vue3 + vite

  1. 正常搭建脚手架:npm create vite@latest 项目名称

  2. 安装electron的相关依赖:注:安装时终端url要项目名那一层

  3. 安装npm install electron -D

  4. 安装打包工具:npm install electron-builder -D

  5. 开发工具:npm install electron-devtools-installer -D

  6. 配置文件:npm install vite-plugin-electron -D,npm install vite-plugin-electron-renderer -D

  7. 在项目的根目录下新建electron-main文件夹,之后新建index.ts,配置如下:

    javascript 复制代码
    import { app, BrowserWindow } from "electron";
    import * as path from "path";
    
    // 本地启动的vue项目路径
    const vueProjectAddress = "http://localhost:5173"
    /**
     * 创建一个新的窗口
     */
    const createWindow = () =>{
      const win = new BrowserWindow({
        webPreferences: {
          contextIsolation: false, // 是否开启隔离上下文
          nodeIntegration: true, // 渲染进程使用Node API
        },
      });
      if (app.isPackaged) {
        win.loadFile(path.join(__dirname, "../index.html"));
      } else {
        win.loadURL(vueProjectAddress);
      }
    };
    // 打开窗口
    app.whenReady().then(() => {
      createWindow(); // 创建窗口
      app.on("activate", () => {
        if (BrowserWindow.getAllWindows().length === 0) createWindow();
      });
    });
    // 关闭窗口
    app.on("window-all-closed", () => {
      if (process.platform !== "darwin") {
        app.quit();
      }
    });
  8. 在tsconfig.app.json中的include增加配置"electron-main/**/*.ts"

    javascript 复制代码
    "include": [
    "src/**/*.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "electron-main/**/*.ts"
    ]
  9. 在vite.config.ts配置

    javascript 复制代码
    import electron from "vite-plugin-electron";
    import electronRenderer from "vite-plugin-electron-renderer";
    export default defineConfig({
      plugins: [
        vue(),
        electron({
          entry: "electron-main/index.ts", // 主进程文件
        }),
        electronRenderer(),
      ],
      build: {
        emptyOutDir: false, // 默认情况下,若 outDir 在 root 目录下,则 Vite 会在构建时清空该目录
      },
    })
  10. 打开package.json,增加以下配置:

    javascript 复制代码
    {
      "name": "my-vue-app",
      "private": true,
      "version": "0.0.0",
      "main": "dist-electron/index.js", // 新增
      "scripts": {
        "dev": "vite",
        "build": "vue-tsc && rimraf dist && vite build && electron-builder",
        "preview": "vite preview"
      },
      // build 新增
      "build": {
        "appId": "com.smallpig.desktop",
        "productName": "smallpig",
        "asar": true,
        "copyright": "Copyright © 2022 smallpig",
        "directories": {
          "output": "release/${version}"
        },
        "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": "版本更新的具体内容"
        }
      },
      "dependencies": {
        "electron-devtools-installer": "^3.2.0",
        "vue": "^3.2.45"
      },
      "devDependencies": {
        "@vitejs/plugin-vue": "^4.0.0",
        "electron": "^22.0.2",
        "electron-builder": "^23.6.0",
        "install": "^0.13.0",
        "npm": "^9.3.0",
        "polyfill-exports": "^0.4.0-beta.2",
        "rimraf": "^4.1.0",
        "typescript": "^4.9.3",
        "vite": "^4.0.0",
        "vite-plugin-electron": "^0.11.1",
        "vite-plugin-electron-renderer": "^0.11.4",
        "vue-tsc": "^1.0.11"
      }
    }
  11. 在npm run dev即可

相关推荐
小白求学16 分钟前
CSS响应式布局
前端·css
Minyy1122 分钟前
小程序项目实践(一)--项目的初始化以及前期的准备工作
开发语言·前端·git·小程序·gitee·uni-app
今晚吃什么呢?23 分钟前
module
开发语言·javascript·ecmascript
谢尔登1 小时前
【React】如何对组件加载进行优化
前端·react.js·前端框架
华实coding1 小时前
ajax实现添加数据
前端·ajax·okhttp
黄毛火烧雪下1 小时前
React 为什么 “虚拟 DOM 顶部有很多 provider“?
前端·javascript·react.js
Meowmow1 小时前
React学习01 jsx、组件与组件的三大属性
前端·学习·react.js
岁聿云暮1 小时前
机械臂之贝塞尔曲线的应用
前端·vue.js
这孩子叫逆1 小时前
axios 使用
开发语言·javascript·ecmascript
霸气小男1 小时前
react 封装防抖
前端·javascript·react.js