Electron + Vue3 + TS + Vite 搭建桌面应用

参考:https://blog.csdn.net/mo911108/article/details/131456698

npm -v
10.2.4
npm create vite@latest gcto-electron-app --template vue-ts

运行项目

npm run dev

在这里插入图片描述

切换镜像源并安装electron,需要设置ELECTRON_MIRROR才行,win10操作如下:

set ELECTRON_MIRROR=http://npm.taobao.org/mirrors/electron/
//安装electron
npm install electron -D
//打包工具
npm install electron-builder -D
//开发工具
npm install electron-devtools-installer -D
//集成Vite和Electron,方便后续在渲染进程中使用Node API或Electron API
npm install vite-plugin-electron -D
npm install vite-plugin-electron-renderer -D
 
//快速删除某些文件和文件夹
npm install rimraf -D    

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

 // electron-main/index.ts
import { app, BrowserWindow } from "electron"
import path from "path"
 
const createWindow = () => {
  const win = new BrowserWindow({
    webPreferences: {
      contextIsolation: false, // 是否开启隔离上下文
      nodeIntegration: true, // 渲染进程使用Node API
      preload: path.join(__dirname, "./preload.js"), // 需要引用js文件
    },
  })
 
  // 如果打包了,渲染index.html
  if (process.env.NODE_ENV !== 'development') {
    win.loadFile(path.join(__dirname, "./index.html"))
    win.webContents.openDevTools()
  } else {
    let url = "http://localhost:5173" // 本地启动的vue项目路径。注意:vite版本3以上使用的端口5173;版本2用的是3000
    win.loadURL(url)
    win.webContents.openDevTools()
  }
}
 
app.whenReady().then(() => {
  createWindow() // 创建窗口
  app.on("activate", () => {
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})
 
// 关闭窗口
app.on("window-all-closed", () => {
  if (process.platform !== "darwin") {
    app.quit()
  }
}) 

项目根目录创建electron-preload目录,在electron-preload目录新建preload.ts文件,参考示例代码如下:

// electron-preload/preload.ts
import os from "os";
console.log("platform", os.platform());

修改vite.config.ts,将当前独立的vite与electron关联起来

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
 
import electron from "vite-plugin-electron"
import electronRenderer from "vite-plugin-electron-renderer" 
import polyfillExports from "vite-plugin-electron-renderer" 
 
export default defineConfig(({ mode }) => ({
  base: mode == 'development' ? '' : './',
  plugins: [
    vue(),
    electron([{
      entry: "electron-main/index.ts", // 主进程文件
    },
    {
      entry: 'electron-preload/preload.ts'
    }
  ]),
    electronRenderer(),
    polyfillExports(),
  ],
  build: {
    emptyOutDir: false, // 默认情况下,若 outDir 在 root 目录下,则 Vite 会在构建时清空该目录
    outDir: "dist-electron"
  },
}))

修改tsconfig.json
增加electron相关的监听,增加配置内容如下

"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue","electron-main/**/*.ts","electron-preload/**/*.ts"],

修改package.json

  1. 删除"type":“module”
  2. 增加"main": “dist-electron/index.js”
  3. “build"修改为"build”: “rimraf dist-electron && vite build && electron-builder”
  4. 修改dev运行命令,增加chcp 65001支持中文显示,“scripts”: {“dev”: “chcp 65001 && vite”}
  5. (如果不涉及打包,可以不配置)增加配置build配置(配置build才能打包成功,具体含义可以官网查询),注意files及output配置的路径,files打包关联路径,output为后续包生成路径
{
  "name": "gcto-electron-app",
  "private": true,
  "version": "0.0.0",
  "main": "dist-electron/index.js", 
  "scripts": {
    "dev": "vite",
    "build": "rimraf dist-electron && vite build && electron-builder",
    "preview": "vite preview",
    "start": "electron ."
  },
  "dependencies": {
    "vue": "^3.3.11"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^4.5.2",
    "electron": "^28.2.1",
    "electron-builder": "^24.9.1",
    "electron-devtools-installer": "^3.2.0",
    "rimraf": "^5.0.5",
    "typescript": "^5.2.2",
    "vite": "^5.0.8",
    "vite-plugin-electron": "^0.28.1",
    "vite-plugin-electron-renderer": "^0.14.5",
    "vue-tsc": "^1.8.25"
  }
}

运行

npm run dev

打包软件
package.json如下

{
  "name": "gcto-electron-app",
  "private": true,
  "version": "0.0.0",
  "main": "dist-electron/index.js", 
  "scripts": {
    "dev": "chcp 65001 && vite",
    "build": "rimraf dist-electron && vite build && electron-builder",
    "preview": "vite preview"
  },
  "dependencies": {
    "vue": "^3.3.11"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^4.5.2",
    "electron": "^28.2.1",
    "electron-builder": "^24.9.1",
    "electron-devtools-installer": "^3.2.0",
    "rimraf": "^5.0.5",
    "typescript": "^5.2.2",
    "vite": "^5.0.8",
    "vite-plugin-electron": "^0.28.1",
    "vite-plugin-electron-renderer": "^0.14.5",
    "vue-tsc": "^1.8.25"
  },
  "build": {
    "appId": "com.electron.desktop",
    "productName": "electron",
    "asar": true,
    "copyright": "Copyright © 2024 electron",
    "directories": {
      "output": "release/${version}"
    },
    "files": [
      "./dist",
      "./package.json",
      "./dist-electron"
    ],
    "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,
      "installerIcon": "public/images/logo.ico",
      "uninstallerIcon": "public/images/logo.ico",
      "installerHeader": "public/images/logo.ico",
      "installerHeaderIcon": "public/images/logo.ico"
    },
    "publish": [
      {
        "provider": "generic",
        "url": "http://127.0.0.1:8080"
      }
    ],
    "releaseInfo": {
      "releaseNotes": "版本更新的具体内容"
    }
  }
}

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/507488.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

波奇学Linux:TCP协议

TCP协议传输层有发送缓冲区和接收缓冲区 read,recv,send的函数调用发送缓冲区,本质并不是数据发送到网络当中,数据什么时候发送,发送多少,出错了怎么办,由TCP协议自主决定 发送到对方缓冲区本…

Elasticsearch是什么及作用

初识Elasticsearch 一、Elasticsearch是什么? es是款强大的开源搜索技术,具备非常多强大的功能,能够帮助我们开发人员从海量数据中快速找到需要的内容。例如在GitHub上搜索代码,在jd、tb网站中搜索商品、在baidu中搜索答案。 二、…

智慧停车系统运行原理和影响评估

一:智慧停车系统概述 智慧停车系统运用信息通信技术,整合传感器、摄像头、车牌识别设备,实时监控停车场情况,为车主提供便捷快速的停车体验。主要功能包括车位查询、预约停车、自动计费、无感支付等。车主可通过手机APP或自助终端…

Autodesk Maya 2025 mac玛雅三维动画特效软件

Autodesk Maya 2025 for Mac是一款功能强大、操作简便的三维动画软件,适用于电影、电视、游戏、建筑、工业设计、虚拟现实和动画等领域。无论是专业设计师还是初学者,都可以通过Maya 2025实现自己的创意和想法,创作出高质量的三维作品。 软件…

NEO 学习之 MLE(最大似然估计)

文章目录 简单题目MLE 在不同的分布的运用正态分布指数分布均匀分布泊松分布 如何理解 最大似然估计? 就是我们先取出一堆样本,得到一个L( θ \theta θ) 函数,然后的话,这个是关于 θ \theta θ 的一个函数,那么由于存…

C++学习笔记(入门)

c学习笔记&#xff08;入门&#xff09; 文章目录 c学习笔记&#xff08;入门&#xff09;前言精华一、&#xff08;1&#xff09;c语言结构基础1.头文件2.指明空间&#xff1a;using namespace std3.输入输出&#xff1a;cin >>&#xff0c;cout << ... << …

3.29 文章翻译RO——Robust scheduling of building energy system under uncertainty

highlight 我们建立了一个带有冷却器和冰热能储存的建筑能源系统模型。 提出了一种两阶段鲁棒策略来调度系统运行。 具有适当参数的鲁棒策略优于确定性方法。 鲁棒策略和MPC方法的性能相似。 本文提出了一种鲁棒调度策略&#xff0c;用于在预测不确定的情况下管理具有太阳能发电…

目标检测——服饰属性标签识别数据集

一、重要性及意义 首先&#xff0c;随着电商、时尚推荐等业务的发展&#xff0c;服饰属性标签识别已经成为一项关键的计算机视觉任务。这些标签&#xff0c;如颜色、款式、材质等&#xff0c;对于实现图像搜索、时尚推荐等业务需求至关重要。服饰属性标签识别数据集为此类任务…

编程语言 MoonBit 本周有超多重磅更新等你来探索:expect 测试添加 inspect 函数,还有……

MoonBit 更新 1. expect 测试添加 inspect 函数 expect 测试添加针对 Show 接口的 inspect 函数&#xff0c;签名如下&#xff1a; pub fn inspect(obj: Show,~content: String "",~loc: SourceLoc _,~args_loc: ArgsLoc _ ) -> Result[Unit, String]⚠️ 此…

svn拉代码乱码请执行清理命令

代码有冲突&#xff0c;突然就svn就不好使了&#xff0c;报错&#xff0c;清理也报错 解决办法&#xff1a; 1、下载SQLite工具 地址&#xff1a;SQLite 下载页面 2、新建一个临时文件夹&#xff0c;使用英文名字&#xff0c;将解压后的sqlite.exe文件复制到这个临时文件夹下…

如何利用生成式人工智能(AI)推广海外仓储机器人?

随着全球物流行业的迅速发展&#xff0c;仓储机器人在提高效率和降低成本方面发挥着越来越重要的作用。然而&#xff0c;要在海外市场推广仓储机器人&#xff0c;需要制定一系列有效的营销策略。以下是一些关键步骤&#xff1a; 市场调研和定位 在海外市场推广仓储机器人之前…

OSPF---开放式最短路径优先协议

1. OSPF描述 OSPF协议是一种链路状态协议。每个路由器负责发现、维护与邻居的关系&#xff0c;并将已知的邻居列表和链路费用LSU报文描述&#xff0c;通过可靠的泛洪与自治系统AS内的其他路由器周期性交互&#xff0c;学习到整个自治系统的网络拓扑结构;并通过自治系统边界的路…

C++项目——集群聊天服务器项目(十一)服务器异常退出与添加好友业务

本节来实现C集群聊天服务器项目中的服务器异常退出与添加好友业务&#xff0c;一起来试试吧 一、服务器异常退出 在Linux环境下&#xff0c;我们在服务器端使用CTRLC结束程序执行&#xff0c;即使用CTRLC让服务器异常退出&#xff0c;这样的后果是本应登录服务器的用户在数据库…

【Linux实验室】NFS、DHCP的搭建

NFS、DHCP的搭建 1、nfs服务搭建及测试什么是NFS&#xff1f;环境准备服务端机器安装nfs-utils和rpcbind包启动NFS服务创建/data/NFSdata目录&#xff0c;配置nfs文件启动服务挂载测试在服务端在共享目录下创建文件测试在客户端在共享目录下创建文件 2、dhcp服务搭建及测试什么…

【算法】回形遍历N*N的二维数组

题目 通常&#xff0c;可以按照逐行、逐列等不同方法输出二维数组中的全部元素。 如果按照回形的路线&#xff08;如下图&#xff09;输出数组中的全部元素&#xff0c;你能给出比较有效的解法吗&#xff1f; 第一行为正整数N(1≤N≤10) 之后有N行、N列个正整数&#xff08;即…

Caddy之静态站点应用场景

一、背景与介绍 无意之中看到公司部门的软件介质下载站点不是使用Nginx部署&#xff0c;而是使用Caddy。就比较好奇了&#xff0c;这个Caddy是个什么东西? 为啥他们没用Nginx呢&#xff0c;带着好奇心搜索了一下相关资料。 官方解释: Caddy is a powerful, extensible platfo…

Linux如何连接github仓库

一.创建一个github账号 如何创建一个github账号 二.在github上创建一个仓库 登录上github后出现这个界面 然后点击左上角头像&#xff0c;在按照图片位置点击&#xff1a; 继续按照图片上的位置进行点击&#xff1a; 创建成功&#xff1a; 三.云主机连接Github仓库 1.在linux中…

【T5模型源码】深入T5模型:源码解析与实现细节

【T5模型源码】深入T5模型&#xff1a;源码解析与实现细节 文章脉络 模型结构图 类关系分析 简单类的源码 T5LayerNorm T5DenseActDense T5DenseGatedActDense T5LayerFF 复杂类的源码 常见参数介绍 最难的T5Attention源码 常见面试提问 总结 我们在日常业务中可能…

QuillEditor无法识别显示含有div和转义字符的问题

在解决前端根据爬取抓过来的数据时&#xff0c;要显示到富文本框中&#xff0c;如下&#xff1a; <div class\"info_cont\" id\"zoomcon\">\n <p><br></p><p style\";text-align: justify;font-family: Calibri;font-size…

解决Quartus与modelsim联合仿真问题:# Error loading design解决,是tb文件中没加:`timescale 1ns/1ns

解决Quartus与modelsim联合仿真问题&#xff1a;# Error loading design解决&#xff0c;是tb文件中没加&#xff1a;timescale 1&#xff0c;一直走下来&#xff0c;在modelsim中出现了下面问题2&#xff0c;rtl文件、tb文件2.1&#xff0c;rtl代码2.2&#xff0c;tb测试2.3&a…