Electron + ts + vue3 + vite 项目搭建

news/2024/5/20 12:06:51/文章来源:https://blog.csdn.net/mo911108/article/details/131456698
Electron 是一个基于 Chromium 和 Node.js 的桌面应用程序开发框架,而 Vue3 则是一种流行的前端框架。将两者结合使用可以快速地打造出跨平台的桌面应用程序。在这种组合中,Electron 提供了强大的桌面应用开发能力,而 Vue3 则提供了易用的 UI 组件和开发体验。
 

在创建选项中选择ts和vue选项。
之后,安装依赖之后试运行一下,出现一下页面意味着vite-vue项目创建成功。

npm create vite@latest electron-vue3-ts-vite-test1

 VSCode打开electron-vue3-ts-vite-test1或者cd electron-vue3-ts-vite-test1

npm install //完成初始化
npm run dev //试运行确认是否有问题

2.安装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    

 

3.配置electron
在项目的根目录下新建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 APIpreload: path.join(__dirname, "./preload.js"), // 需要引用js文件},})// 如果打包了,渲染index.htmlif (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用的是3000win.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文件,参考示例代码如下:

注意避坑:preload.ts不要与preload-main中的index.ts同名,

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

 4.修改项目配置文件

  • 修改tsconfig.json

增加electron相关的监听,增加配置内容如下,electron-main/**/*.tselectron-preload/**/*.ts为新增配置

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

  • 修改vite.config.ts

将当前独立的vite与electron关联起来

【补充说明】:

  • electron()是可以传入数组对象的,网上很多教程或者案例都是传入对象,导致很多小伙伴只知道electron-main/index.ts(对应electron项目main.js)怎么配,而不知道perload.js怎么配。

  • electron()支持传递数组,因而可以配置main及preload入口,但由于统一输出到outDir: "dist-electron"同一个目录,由此main及preload不建议创建同名的ts文件,否则会有冲突

  • outDir: "dist-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"},
}))

  •  修改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才能打包成功,具体含义可以官网查询),注意filesoutput配置的路径,files打包关联路径,output为后续包生成路径
appId、productName... —— 应用基本信息信息
win、mac —— 不同类型设备配置
nsis —— 桌面应用程序安装过程的配置
{"name": "electron-vue3-ts-vite-test1","private": true,"version": "0.0.0","main": "dist-electron/index.js", "scripts": {"dev": "vite","build": "vue-tsc && rimraf dist-electron && vite build && electron-builder","preview": "vite preview"},"dependencies": {"vue": "^3.2.47"},"devDependencies": {"@vitejs/plugin-vue": "^4.1.0","electron": "^25.2.0","electron-builder": "^24.4.0","electron-devtools-installer": "^3.2.0","rimraf": "^5.0.1","typescript": "^5.0.2","vite": "^4.3.9","vite-plugin-electron": "^0.12.0","vite-plugin-electron-renderer": "^0.14.5","vue-tsc": "^1.4.2"},"build": {"appId": "com.electron.desktop","productName": "electron","asar": true,"copyright": "Copyright © 2022 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},"publish": [{"provider": "generic","url": "http://127.0.0.1:8080"}],"releaseInfo": {"releaseNotes": "版本更新的具体内容"}}
}

nsis(桌面应用程序安装过程)配置一览

{ // 一键安装程序、或者辅助安装程序(默认是一键安装)"oneClick": false,// 是否允许请求提升,如果为 false,则用户必须使用提升的权限重新启动安装程序(仅作用于辅助安装程序)"allowElevation": true, // 是否允许修改安装目录(仅作用于辅助安装程序)"allowToChangeInstallationDirectory": true,// 安装程序图标的路径"installerIcon": "public/timg.ico",// 卸载程序图标的路径"uninstallerIcon": "public/timg.ico",// 安装时头部图片路径(仅作用于辅助安装程序)"installerHeader": "public/timg.ico",// 安装时标题图标(进度条上方)的路径(仅作用于一键安装程序)"installerHeaderIcon": "public/timg.ico",// 安装完毕界面图片的路径,图片后缀.bmp,尺寸 164*314(仅作用于辅助安装程序)"installerSidebar": "public/installerSiddebar.bmp",// 开始卸载界面图片的路径,图片后缀.bmp,尺寸 164*314(仅作用于辅助安装程序)"uninstallerSidebar": "public/uninstallerSiddebar.bmp",// 控制面板中的卸载程序显示名称"uninstallDisplayName": "${productName}${version}",// 是否创建桌面快捷方式"createDesktopShortcut": true,// 是否创建开始菜单快捷方式"createStartMenuShortcut": true,// 用于快捷方式的名称,默认为应用程序名称"shortcutName": "TestApp",// NSIS 包含定制安装程序脚本的路径,安装过程中自行调用 (可用于写入注册表 开机自启动等操作)"include": "script/installer.nsi",// 用于自定义安装程序的 NSIS 脚本的路径"script": "script/installer.nsi",// 是否在卸载时删除应用程序数据(仅作用于一键安装程序)"deleteAppDataOnUninstall": false,// 完成后是否运行已安装的应用程序(对于辅助安装程序,应删除相应的复选框)"runAfterFinish": true,// 是否为开始菜单快捷方式和程序文件目录创建子菜单,如果为 true,则使用公司名称"menuCategory": false,
} 
  •  修改.gitignore

增加忽略dist-electron

5.运行测试

  • dev测试: npm run dev (由于有vite加持,支持hotreload,无需额外配置)

  • 打包测试: npm run build
打包成功后再release目录下生成一个版本文件夹,打开文件夹,里面有一个.exe文件,点击安装就可以了

 

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

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

相关文章

【2023年江西省研究生数学建模竞赛】题目一 蒸汽发生器倒U型管内液体流动 建模方案及参考文献

代码与结果如下:完整文档见文末 完整思路”请点击这里“到原文章获取 题目: PACTEL压水堆整体测试设备在2009年建造,用于带有垂直倒U型管蒸汽发生器的压水堆热液压相关的安全性研究,参见图1。 PACTEL压水堆设施包括一个反应堆压力容器模型…

机器学习技术(一)——python基础超详解

机器学习技术(一)——python基础超详解 文章目录 机器学习技术(一)——python基础超详解0、引言1、基础概念**:snake:变量****:snake:注释****:snake:输入 输出** 2、数据类型**:snake:数值类型****:snake:运算符****:snake:字符串…

Matlab论文插图绘制模板第106期—带误差棒的堆叠柱状图

在之前的文章中,分享了Matlab带误差棒的折线图绘制模板: 带误差棒的柱状图绘制模板: 进一步,再来分享一下带误差棒的堆叠柱状图的绘制模板。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源…

《移动互联网技术》第一章 概述: 掌握移动互联网的基本概念和组成

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

基于Java+Swing+Mysql商品信息管理系统

基于JavaSwingMysql商品信息管理系统 一、系统介绍二、功能展示1.主页2.新增商品信息3.查询商品信息 三、数据库四、其他系统实现五、获取源码 一、系统介绍 该系统实现了查看商品列表、新增商品信息、查询商品信息 运行环境:eclipse、idea、jdk1.8 二、功能展示…

Android跨平台语言分析

跨平台技术发展的三个阶段 第一阶段是混合开发的web容器时代 为了解决原生开发的高成本、低效率,出现了Hybrid混合开发原生中嵌入依托于浏览器的WebViewWeb浏览器中可以实现的需求在WebView中基本都可以实现但是Web最大的问题是,它的性能和体验与原生开发…

ARM接口题目

1)说出ARM可以工作的模式名字。 ARM有8个基本工作模式: User :非特权模式,大部分任务执行在这种模式 FIQ :当一个高优先级(fast)中断产生时将会进入这种模式 IRQ :当一个低优先级(normal)中断产生时将会进入这种模式 Supervisor :当复位…

《Linux操作系统编程》 第十章 线程与线程控制: 线程的创建、终止和取消,detach以及线程属性

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

微服务04 分布式搜索引擎 elasticsearch DSL数据聚合 自动补全 数据同步 集群 Sentinel

微服务03 分布式搜索引擎 elasticsearch ELK kibana RestAPI 索引库 DSL查询 RestClient 黑马旅游 分布式搜索引擎03 1.数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎&#x…

【FreeRTOS】Arduino开发STM32

0.开发环境(工具) Vscode 、platformio、arduino、STM32F103C8T6、USB-TTL 引脚连接:STM32直接设置为烧录模式即可,烧录完成后会自动运行程序。 1.点灯加串口输出调试 注意事项:每次上传程序前,需要按一下复位键。 #include &…

vue下基于elementui自定义表单-后端数据设计篇

vue下基于elementui自定义表单-后端篇 自定义表单目前数据表单设计是基于数据量不大的信息单据场景,因为不考虑数据量带来的影响。 数据表有: 1.表单模版表,2.表单实例表,3.表单实例项明细表,4表单审批设计绑定表 以FormJson存…

Unity | HDRP高清渲染管线学习笔记:HDRP Custom Pass

目录 一、Custom Pass Volume组件介绍 1.Mode(模式) 2.Injection Point(注入点) 3.Priority 4.Fade Radius 5.custom passes 二、查看Custom Pass的渲染阶段 Custom Pass允许你执行以下操作(官方文档&#xff0…

前端食堂技术周刊第 88 期:Svelte4、NestJS 10、State of CSS 2023、Vitest 1.0 Roadmap、Fresh 1.2

美味值:🌟🌟🌟🌟🌟 口味:帝王蟹柳 食堂技术周刊仓库地址:https://github.com/Geekhyt/weekly 大家好,我是童欧巴。欢迎来到前端食堂技术周刊,我们先来看下…

mysql基础3——数据备份与恢复、破解数据库密码

文章目录 一、备份方案二、备份工具mysqldump2.1 备份整张表数据2.2 备份整个库数据 三、全量备份四、差异备份五、数据库密码破解 一、备份方案 备份方案概念特点全量备份对某一个时间点上的所有数据或应用进行完全拷贝。数据恢复快,备份时间长。增量备份在一次全…

安装Home Assistant

文章目录 前言1. 安装Home Assistant2. 配置Home Assistant3. 安装cpolar内网穿透3.1 windows系统3.2 Linux系统3.3 macOS系统 4. 映射Home Assistant端口5. 公网访问Home Assistant6. 固定公网地址6.1 保留一个固定二级子域名6.2 配置固定二级子域名 转载自远程穿透的文章&…

多元回归预测 | Matlab海鸥算法(SOA)优化极限学习机ELM回归预测,SOA-ELM回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab海鸥算法(SOA)优化极限学习机ELM回归预测,SOA-ELM回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环…

【C语言】计算机是如何存储整数和小数的?

文章目录 前言一、正整数和0二、负整数三、小数1、定点数(1)什么是定点数(2)表示精度(3)表示范围(4)优缺点 2、浮点数(1)什么是浮点数(2&#xff…

JMeter变量和和属性(4)

这里写目录标题 一、JMeter变量1、使用JMeter变量的作用有:2、定义变量的方式3、引用变量的方式4、引用变量5、案例:切换GreaterWMS的环境6、案例:测试平台登录案例 二、JMeter属性1、JMeter属性特点2、JMeter属性和变量的区别:3、…

MathType公式批量转换为Word自带公式的VBA实现及error ‘4198‘ 处理

VBA 纯新手,程序可能比较傻,大家将就看。有改进建议,欢迎留言 参考链接: 1、2种办法把MathType公式转换为Word公式 2、一键批量将mathtype公式转换成word自带公式-vba/vbnet_mathtype批量转word自带_一路向前的小Q的博客-CSDN博…