Electron + vite + vue3简单实现

news/2023/5/28 8:36:04

文章目录

    • 一、创建Electron应用程序
      • 1. 初始化vite项目
      • 2. 安装electron
      • 3. 修改配置文件
      • 4. 编写electron文件
      • 5. `npm run dev` 运行
    • 二、打包
      • 1. 安装包
      • 2. 配置打包脚本
      • 3. 渲染进程和主进程的通信
        • 渲染进程
        • 主进程

一、创建Electron应用程序

Electron官网

1. 初始化vite项目

npm create vite@latestcd 项目文件
npm install

2. 安装electron

npm install electron -D
npm install vite-plugin-electron -D

electron 安装失败:

# 查看详细安装日志
npm install electron -D  --timing=true --loglevel=verbose# 切换成cnpm安装
## 安装cnpm
npm install -g cnpm --registry=http://registry.npmmirror.com
## cnpm安装
cnpm install electron -D

3. 修改配置文件

vite.config.ts

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Electron from 'vite-plugin-electron'// https://vitejs.dev/config/
export default defineConfig({plugins: [vue(),Electron({entry: 'electron/index.ts'})],
})

package.json

”type“: "module" 替换为 "main": "dist-electron/index.js"

4. 编写electron文件

在这里插入图片描述


import path from "path";
const { app, BrowserWindow } = require('electron');const createWindow = () => {const win = new BrowserWindow({width: 800,height: 600,webPreferences: {contextIsolation: false, // 是否开启隔离上下文nodeIntegration: true, // 渲染进程使用Node API// preload: path.join(__dirname, "../electron-preload/index.js"), // 需要引用js文件}});// 如果打包了,渲染index.htmlif (app.isPackaged) {win.loadFile(path.join(__dirname, "../index.html"));} else {win.loadURL(process.env['VITE_DEV_SERVER_URL'])}
};app.whenReady().then(() => {createWindow(); // 创建窗口app.on('activate', () => {if (BrowserWindow.getAllWindows().length === 0) {createWindow();}});
});// 关闭窗口
app.on('window-all-closed', () => {if (process.platform !== 'darwin') {app.quit();}
});

5. npm run dev 运行

在这里插入图片描述

详细请看:Electron + Vite + TS + Vue3打开新窗口实战

二、打包

1. 安装包

# 利用electron-builder来进行打包
npm install electron-builder -D# 调试工具
npm install electron-devtools-installer -D# 辅助工具,快速删除某些文件或文件夹
npm install rimraf -D

electron-devtools-installer github地址

2. 配置打包脚本

修改package.json

修改打包命令: "build": "rimraf dist && vue-tsc && vite build && electron-builder",

添加 build 配置

{......"build": {"appId": "com.electron.desktop","productName": "myElectron","asar": true,"copyright": "Copyright © 2022 myElectron","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": "版本更新的具体内容"}}
}

3. 渲染进程和主进程的通信

# 安装渲染插件
npm install vite-plugin-electron-renderer -D

配置 vite.config.ts

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Electron from 'vite-plugin-electron'
import electronRender from 'vite-plugin-electron-renderer'// https://vitejs.dev/config/
export default defineConfig({plugins: [vue(), Electron({entry: "electron/index.ts"}), electronRender()],build: {emptyOutDir: false,}
})

类似发布订阅模式

渲染进程

渲染进程通过 ipcRenderer.on()ipcRenderer.send() 接收/传递信息主进程

<script setup lang="ts">
import { ipcRenderer } from 'electron'// 渲染进程接收主进程传递信息
ipcRenderer.on('load', (_, msg) => {console.log('主进程传递信息 :>> ', msg)
})// 渲染进程传递主进程信息
const send = () => {ipcRenderer.send('msg', 1111)
}
</script><template><div><a href="https://vitejs.dev" target="_blank"><img src="/vite.svg" class="logo" alt="Vite logo" /></a><a href="https://vuejs.org/" target="_blank"><img src="./assets/vue.svg" class="logo vue" alt="Vue logo" /></a></div><button @click="send">发送</button>
</template>

主进程

主进程通过 ipcMain.on() 接收渲染进程传递数据,通过 win.webContent.send() 传递数据至渲染进程

const { app, BrowserWindow, ipcMain } = require('electron');const createWindow = () => {...// 打开调试工具win.webContents.openDevTools()// 主进程接收渲染进程传递信息ipcMain.on('msg', (_, num) => {console.log('渲染进程传递信息 :>> ', num);})setTimeout(() => {// 主进程传递渲染进程win.webContents.send('load', { msg: '初始化完成' })}, 2000)
};

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

408—栈,队列和数组

stl里面的栈中没有清空的函数&#xff0c; 需要自己编写函数清空&#xff08;while循环返回pop&#xff09;&#xff0c; 更常见的做法是重新定义一个栈&#xff0c;这样的时间复杂度就是O(1)栈的基本操作&#xff0c;出栈入栈判空和求栈的长度,和取栈顶元素以及清空出栈和取栈…

MOS 管 场效应管 应用

一般MOS管的参数&#xff0c;Vgs和Vgs(th)分别是什么意思&#xff0c;区别是什么&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f; Vgs:指g和s之耐压值,一般为20V. Vgs(th):MOSFET开始ON时的输入电压值. Vgs(th)这个值很关键&#xff0c;选MOS时一定要注意。 -…

100w人在线的 弹幕 系统,是怎么架构的?

Shopee是东南亚及中国台湾地区的电商平台 。2015年于新加坡成立并设立总部&#xff0c;随后拓展至马来西亚、泰国、中国台湾地区、印度尼西亚、越南及菲律宾共七大市场。 Shopee拥有商品种类&#xff0c;包括电子消费品、家居、美容保健、母婴、服饰及健身器材等。 2022年第二…

场效应管的性能和特点是什么分析-KIA MOS管

场效应管的性能和特点 根据三极管的原理开发出的新一代放大元件&#xff0c;有三个极性&#xff0c;栅极&#xff0c;漏极&#xff0c;源极&#xff0c;它的特点dao是栅极的内阻极高&#xff0c;采用二氧化硅材料的可以达到几百兆欧&#xff0c;属于电压控制型器件。 1、概念…

OPC实践:通过 python-docx 读取 docx 文档

概述 本文记录下列命令执行的过程&#xff0c;通过对过程中的关键步骤进行记录&#xff0c;掌握 python-docx 库中 opc 与 parts 模块的源码、以及加深对 OPC 的理解。 import docx# fp 为 docx 文件路径&#xff0c; docx 包含一个 hello 字符串、一张 jepg 图片及一个表格…

MySQL数据库服务器上的RAID存储架构的电池充放电原理

服务器使用多块磁盘组成的RAID阵列的时候&#xff0c;一般会有一个RAID卡&#xff0c;这个RAID卡是带有一个缓存的&#xff0c;这个缓存不是直接用我们的服务器的主内存的那种模式&#xff0c;它是一种跟内存类似的SDRAM&#xff0c;大致可以认为它也是基于内存来存储的吧&…

【腾讯TMQ】iOS电量测试实践

iOS电量相关问题一直是测试人员头疼的事情&#xff0c;电量测试怎么开展、问题怎么复现和跟进定位、用户反馈电量相关的问题我们如果获取更多的信息等等&#xff0c;一直都没有一个好的解决方案&#xff0c;以至于我们面对电量相关的问题时&#xff0c;总是束手无策。整个项目组…

ble属性数据库

这里只介绍常用的一些概念&#xff0c;一些极少用到的概念为避免混淆这里不做介绍。 简单的来说&#xff0c;BLE的服务端属性数据库可以就看做是一张表。表中包含很多个条目。每一条条目就称为属性条目。 属性条目 属性条目 属性条目 。。。。。。 。。。。。。。…

如何做一个国产数据库(六) 网络传输 nodejs做测试客户端

如何做一个国产数据库一 如何做一个国产数据库二 如何做一个国产数据库三 如何做一个国产数据库四 如何做一个国产数据库五 网络实战服务器 我们再四中说过使用tcp进行协议的链接&#xff0c;对我们所定义的协议如果有不清楚的&#xff0c;我们可以再看一下四&#xff0c;示例…

MySQL数据库性能调优全攻略

数据库调优从以下几个方面进行调优 数据库配置SQL优化硬件设置文件系统操作系统 1. 数据库配置 InnoDB存储引擎与PostgreSQL非常不同InnoDB的缓冲池用来管理所有数据库对象写文件操作通过O_DIRECT选项来避免两次缓存InnoDB缓冲池越大性能越好 通常是系统内存60%~80% Postgre…

MySQL:35 RAID锂电池充放电导致的MySQL数据库性能抖动的优化

1.回顾前面的内容 前面几章学完了MySQL磁盘读写的机制&#xff0c;Linux存储系统的原理&#xff0c;RAID磁盘阵列的介绍&#xff0c;RAID锂电池定时充放电的原理。 2.案例讲解RAID锂电池充放电对性能抖动的优化 假设有一个核心的业务&#xff0c;他的数据库是部署在高配置服…

APP电量测试这样做。

&#xfeff;&#xfeff;iOS电量相关问题一直是测试人员头疼的事情&#xff0c;电量测试怎么开展、问题怎么复现和跟进定位、用户反馈电量相关的问题我们如果获取更多的信息等等&#xff0c;一直都没有一个好的解决方案&#xff0c;以至于我们面对电量相关的问题时&#xff0c…

锂电池怎样监视电量_我可以使用任务计划程序监视计算机的电池吗?

锂电池怎样监视电量If you like to keep a close eye on your laptop’s battery charge level, then you may be looking for a built-in way to help monitor it while you are busy working. Is there one or do you need a custom solution? Today’s SuperUser Q&A p…

阳振坤:从电动汽车看分布式数据库的发展和崛起

电动汽车与分布式数据库&#xff0c;看似两个风马不相及的事物&#xff0c;其发展路径却极为雷同&#xff1a;两者都在较早期被发明&#xff0c;但都没有成为主流。 21 世纪初&#xff0c;受环境保护、温室效应和能源短缺等因素影响&#xff0c;电动汽车再次进入人们的视野&…

android 消息循环滚动条,Android 电池电量进度条,上下滚动图片的进度条(battery)...

最近&#xff0c;制作一个app,需要模拟一个电池电量的进度条&#xff0c;根据电量多少来设置百分比&#xff0c;进度条不断上下滚动&#xff0c;就像平时手机充电一样的电池电量进度条。我就自定义view实现了电量进度条。修改图片就可以达到自己想要的效果一、自定义View&#…

android 电池分析工具,Android 电量分析

Android APP 的电量消耗也是APP 衡量性能的一项指标&#xff0c;一款优秀的应用应该尽可能的消耗更少的电量。在实际开发中&#xff0c;我们可以使用Batterystats 和 Battery Historian 来对设备应用的耗电情况进行分析&#xff0c;从而确定我们开发的应用是否耗电严重&#xf…

mysql数据库raid_MySQL数据库Raid存储方案-阿里云开发者社区

一、RAID的基础知识【定义】RAID(Redundant Array of Independent Disk)是一种独立冗余磁盘阵列。1、为什么要使用RAID?我们知道&#xff0c;单块磁盘无论是从性能上、容量上、还是安全上都存在单点问题&#xff0c;如果把多块硬盘组成一个group&#xff0c;当成一个逻辑驱动器…

mysql数据库raid_MySQL数据库Raid存储方案

作为一名 DBA&#xff0c;选择自己的数据存储在什么上面&#xff0c;应该是最基本的事情了。但是很多 DBA 却容易忽略了这一点&#xff0c;我就是其中一个。之前对 raid 了解的并不多&#xff0c;本文就记录下学习的 raid 相关知识。一、RAID 的基础知识【定义】RAID(Redundant…

【甄选靶场】Vulnhub百个项目渗透——项目五十三:Inclusiveness(更改ua,lfi->rce)

Vulnhub百个项目渗透 Vulnhub百个项目渗透——项目五十三&#xff1a;Inclusiveness&#xff08;更改ua&#xff0c;lfi->rce&#xff09; &#x1f525;系列专栏&#xff1a;Vulnhub百个项目渗透 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x…

(转).Net 分布式系统架构

一、设计目的 基于window平台搭建的大型分布式系统不多&#xff0c;之前了解过myspace、stackoverflow等大型网站。搭建一个大型平台需要综合考虑很多方面&#xff0c;不单纯是软件架构&#xff0c;还包括网络和硬件设备等。由于现代大部分应用建设都面临用户多、高并发、高可用…