探索 Electron:如何利用Electron和Vite打造高效桌面应用

news2024/9/20 10:57:27

Electron是一个开源的桌面应用程序开发框架,它允许开发者使用Web技术(如 HTML、CSS 和 JavaScript)构建跨平台的桌面应用程序,它的出现极大地简化了桌面应用程序的开发流程,让更多的开发者能够利用已有的 Web 开发技能来构建功能强大且跨平台的应用程序,这对于提升开发效率和应用程序的快速交付具有重要意义。

目录

初始项目搭建

目录文件详解

路由配置管理

公共仓库配置


初始项目搭建

        在开发Electron桌面应用之前需要进行环境的配置,对于内部来说需要安装三个大件,也就是我之前所说的 Chromium、Node.js、Native apis,显然的话我们需要提前具备node的开发环境的,这对于前端开发者来说肯定不是问题,如果不是请参考我之前的文章进行安装:地址 ,vite团队已经帮助我们协调electron进行开发了  地址,接下来我们探讨一下如何在vite中使用electron:

至于Chromium和Native apis的话,我们就需要再下载Electron这样一个包去进行获取,这里拿vite进行一个简单的演示,这边参考我之前的文章:超详细教程——vite脚手架的搭建与使用 ,安装一下vite搭配的vue环境,最终得到网页版web页面如下:

接下来我们要开始借助electron-vite开发桌面端应用,需要终端执行如下命令安装electron: 

# npm
npm create @quick-start/electron@latest

# yarn
yarn create @quick-start/electron

# pnpm
pnpm create @quick-start/electron

这里就记住平常使用的npm进行安装吧,执行命令之后输入项目名称选择对应模板,这里就选vue进行讲解吧,如下:

根据需求选择是否使用TS,博主写项目一般都选择TS,这里也就选择TS吧:

是否添加electron更新的插件,当然必须选上:

是否下载electron的镜像代理,这里也选上吧:

配置完成之后,切换到对应项目目录,终端执行 npm i 安装好依赖,终端执行 npm run dev,可以看到我们的项目已经跑起来了,初识页面看着也是非常的简约大气,项目也是给我们默认配置好了相关的插件便于代码的书写:

目录文件详解

electron-vite-vue项目其实和我们平常使用的vite-vue项目基本上大差不差,无非是多了几个文件夹而已,这里我们就比平常额外多出的文件夹的作用做一个简单的详解:

out:该文件是主进程和渲染进程中间桥梁的一个文件夹,默认情况下,构建输出将放置在out(相对于项目根目录)。

├──out/
│  ├──main
│  ├──preload
│  └──renderer
└──...

当然也可以通过命令行来重新指定它,例如 electron-vite dev/build/preview --outDir=dist:

resources:用于放置一些静态文件,像桌面端的应用图标就是该目录下的静态文件:

src:用于存放真正的项目代码的文件,区别于以前的vite项目,该文件夹下存放有三个文件,分别代表着主进程、预加载脚本、渲染进程这三个文件,如下所示:

electron.vite.config.ts:相当于我们vite项目里面的vite.config.ts配置文件,

import { resolve } from 'path'
import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  main: {
    plugins: [externalizeDepsPlugin()]
  },
  preload: {
    plugins: [externalizeDepsPlugin()]
  },
  renderer: {
    resolve: {
      alias: {
        '@renderer': resolve('src/renderer/src')
      }
    },
    plugins: [vue()]
  }
})

路由配置管理

对于桌面端应用来说,用户也是需要进行不同界面的跳转的,这里就需要我们配置一下路由进行页面的跳转,如果想更加深入了解vue3路由知识,推荐参考我之前的文章:地址 ,终端执行如下命令进行安装路由:

npm install vue-router

安装完路由包之后,接下来我们要先创建路由组件,我们需要在渲染进程下的src目录下新建views文件,再创建3个路由组件进行测试:

创建完路由组件之后,接下来开始进行相关router配置,我们需要在渲染进程renderer文件夹下的src文件夹下新建router文件,如下:

// 通过vue-router插件实现模板路由配置
import { createRouter, createWebHistory } from 'vue-router'
import { constantRoute } from './routes'
 
// 创建路由器
const router = createRouter({
  // 路由模式
  history: createWebHistory(),
  routes: constantRoute,
  // 滚动行为
  scrollBehavior() {
    return {
      left: 0,
      top: 0,
    }
  },
})
export default router

这里我单独将routes的属性对象抽离出一个ts文件出来 ,便于后期的维护,代码如下:

// 对外暴露路由(常量路由)
export const constantRoute = [
    {
        path: '/login',
        name: 'login', // 命名路由
        component: () => import('@renderer/views/login/index.vue'),
        meta: {
            title: '登录页面',
        },
    },
    {
        path: '/',
        name: 'home',
        component: () => import('@renderer/views/home/index.vue'),
        meta: {
            title: '后台页面',
        },
    },
    {
        path: '/404',
        name: '404',
        component: () => import('@renderer/views/404/index.vue'),
        meta: {
            title: '404界面',
        },
    },
    {
        path: '/:pathMatch(.*)*',
        name: 'any',
        redirect: '/404',
    },
]

接下来在入口文件 main.ts 处进行路由router的挂载:

如果想把写好的路由进行展示的话,需要通过 router-view 作为路由出口,路由匹配到的组件将进行响应的渲染,这里在App根组件上进行展示,通过 router-link 来进行路由的跳转,如下:

<template>
  <div class="container">
    <router-link to="/login">登录</router-link> &nbsp;
    <router-link to="/">首页</router-link> &nbsp;
    <router-link to="/ab1212out">随便乱输入</router-link>
    <router-view></router-view>
  </div>
</template>

最终呈现的效果如下所示:

公共仓库配置

对于桌面端应用来说,用户可能也是需要进行登录注册的,这里我们就需要通过仓库对用户的信息进行一个存储供全局进行使用,这里的话我们就使用pinia仓库管理工具进行使用,不了解pinia的朋友,推荐看一下我之前讲解的文章:地址 ,本文就不再着重讲解其具体知识。

因为仓库一般也是需要进行持久化管理的,这里顺便把pinia持久化插件也进行安装,这里我们借助pinia的一个持久化存储插件 pinia-plugin-persistedstate ,其运行机制就是,在设置state的时候会自动把数据同步给localstorage,在获取state数据的时候会优先从localStorage中取,终端执行如下命令进行安装pinia:

npm install pinia pinia-plugin-persistedstate

安装完pinia和持久化插件之后,我们需要对其进行一个注册, 在src目录下新建store文件夹,文件夹下新建 index.ts 文件,暴露如下代码:

// 设置pinia仓库
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
 
const pinia = createPinia()
// 注册持久化插件
pinia.use(piniaPluginPersistedstate)
// 对外暴露:入口文件需要安装仓库
export default pinia

创建完仓库代码之后,需要在main.ts入口文件出进行pinia的挂载:

import { createApp } from 'vue'
import App from './App.vue'
// 导入路由组件
import router from './router'
// 导入仓库
import pinia from './store'


createApp(App)
    .use(router) // 注册路由
    .use(pinia) // 安装仓库
    .mount('#app')

接下来在store中新建文件夹modules用于存储仓库文件,在该文件夹创建一个login.js文件,用来存储登录相关数据,这里采用组合式API的写法,如下案例:

// 登录模块仓库
import { defineStore } from "pinia";
import { ref } from "vue"
 
export const useMemberStore = defineStore("login", () => {
    const profile = ref();
    const setProfile = (val: number) => {
        profile.value = val;
    }
    const clearProfile = () => {
        profile.value = undefined
    }
    return { profile, setProfile, clearProfile }
}, { persist: true }) // 开启持久化

后面基本上就是纯vite-vue的项目配置开发了,这里不再赘述,详情请参考我之前的文章:地址 ,这篇文章里面的项目创建的基础配置还是比较全面的,大家可以去了解一下。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三、建造者模式

文章目录 1 基本介绍2 案例2.1 Car 类2.2 CarBuilder 抽象类2.3 EconomyCarBuilder 类2.4 LuxuryCarBuilder 类2.5 CarDirector 类2.6 测试程序2.7 测试结果2.8 总结 3 各角色之间的关系3.1 角色3.1.1 Product ( 产品 )3.1.2 Builder ( 抽象建造者 )3.1.3 ConcreteBuilder ( 具…

电阻有哪些参数呢

电阻是电路中最常见的元件之一&#xff0c;它在控制电流、分压和保护电路等方面发挥着重要作用。了解电阻的主要参数对于选择和使用电阻至关重要。本文将详细介绍电阻的主要参数&#xff0c;包括电阻值、功率额定值、温度系数、容差、噪声、频率特性、体积和封装等。 1. 电阻值…

长模式下的分页

前提 如果开启了长模式&#xff0c;则必须同时开启分页模式&#xff0c;因为长模式弱化了分段模型而分段模型也确实有很多不足&#xff0c;不适应现在操作系统和应用软件的发展长模式也扩展了 CPU 的位宽&#xff0c;使得 CPU 能使用 64 位的超大内存地址空间所以&#xff0c;…

当一个程序员的博客突然变少

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen hello&#xff0c;伙伴们好久不见。马上到了八月&#xff0c;也是我在个人公众号…

JMeter介绍、安装配置以及快速入门

文章目录 1. JMeter简介2. JMeter安装配置3. JMeter快速入门 1. JMeter简介 Apache JMeter是一款开源的压力测试工具&#xff0c;主要用于测试静态和动态资源&#xff08;如静态文件、服务器、数据库、FTP服务器等&#xff09;的性能。它最初是为测试Web应用而设计的&#xff…

ETAS StackM配置及使用-stack监控

文章目录 前言Stack基本介绍StackM配置StackMTargetStackMGeneral Linker配置EcuM配置RTE配置集成与测试总结 前言 嵌入式C语言执行的软件中&#xff0c;stack溢出会导致程序执行异常&#xff0c;严重可能导致直接进硬件异常中断(hardfault)。软件执行过程中的stack监控是非常…

【JAVA多线程】Future,专为异步编程而生

目录 1.Future 2.CompletableFuture 2.1.为什么会有CompletableFuture&#xff1f; 2.2.使用 2.2.1.提交任务获取结果 2.2.2.回调函数 2.2.3.CompletableFuture嵌套问题 1.Future Java中的Future接口代表一个异步计算。其提供了一组规范用来对异步计算任务进行管理控制…

java项目(knife4j使用,静态资源未放在static资源包下,公共字段自动填充,Spring Cache与Spring Task)

Knife4j&#xff08;生成接口文档&#xff09; 使用swagger你只需要按照它的规范去定义接口及接口相关的信息&#xff0c;就可以做到生成接口文档&#xff0c;以及在线接口调试页面。官网:https://swagger.io/ Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。…

uni-app 影视类小程序开发从零到一 | 开源项目推荐

引言 在数字娱乐时代&#xff0c;对于电影爱好者而言&#xff0c;随时随地享受精彩影片成为一种日常需求。分享一款基于 uni-app 开发的影视类小程序。它不仅提供了丰富的影视资源推荐&#xff0c;还融入了个性化知乎日报等内容&#xff0c;是不错的素材&#xff0c;同时对电影…

Springboot同时支持http和https访问

springboot默认是http的 一、支持https访问 需要生成证书&#xff0c;并配置到项目中。 1、证书 如果公司提供&#xff0c;则直接使用公司提供的证书&#xff1b; 如果公司没有提供&#xff0c;也可自己使用Java自带的命令keytool来生成&#xff1a; &#xff08;1&#x…

JavaWeb笔记_Cookie

一.会话技术概述 在日常生活中,A和B之间在打电话过程中一连串的你问我答就是一个会话 在BS模型中,会话可以理解为通过浏览器访问服务端的资源,点击超链接可以进行资源的跳转,直到浏览器关闭过程叫做会话 我们使用会话技术可以解决的是整个会话过程中(通过浏览器浏览服务…

【Linux】一文向您详细介绍 Vim编辑器 显示行号的方法

【Linux】一文向您详细介绍 Vim编辑器 显示行号的方法 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本…

【Matlab】PLS偏最小二乘法回归预测算法(附代码)

资源下载&#xff1a; 资源合集&#xff1a; 目录 一&#xff0c;概述 偏最小二乘法是一种新型的多元统计数据分析方法&#xff0c;于1983年由S.Wold和C.Albano等人首次提出。偏最小二乘法实现了&#xff0c;在一个算法下&#xff0c;可以同时实现回归建模&#xff08;多元线…

类和对象:赋值函数

1.运算符重载 • 当运算符被⽤于类类型的对象时&#xff0c;C语⾔允许我们通过运算符重载的形式指定新的含义。C规定类类型对象使⽤运算符时&#xff0c;必须转换成调⽤对应运算符重载&#xff0c;若没有对应的运算符重载&#xff0c;则会编译报错&#xff1b;&#xff08;运算…

SwiftUI 5.0(iOS 17)滚动视图的滚动目标行为(Target Behavior)解惑和实战

概览 在 SwiftUI 的开发过程中我们常说&#xff1a;“屏幕不够&#xff0c;滚动来凑”。可见滚动视图对于超长内容的呈现有着多么秉轴持钧的重要作用。 这不&#xff0c;从 SwiftUI 5.0&#xff08;iOS 17&#xff09;开始苹果又为滚动视图增加了全新的功能。但是官方的示例可…

【LeetCode】80.删除有序数组中的重复项II

1. 题目 2. 分析 3. 代码 class Solution:def removeDuplicates(self, nums: List[int]) -> int:if len(nums) < 3:return len(nums)i 0j 1k 2while(k < len(nums)):if (nums[i] nums[j]):while(k < len(nums) and nums[j] nums[k] ):k1if (k < len(nums…

C语言指针超详解——最终篇一

C语言指针系列文章目录 入门篇 强化篇 进阶篇 最终篇一 文章目录 C语言指针系列文章目录1. 回调函数是什么2. qsort 函数2.1 概念2.2 qsort 排序 int 类型数据2.3 使用 qsort 排序结构体数据 3. 模拟实现 qsort 函数4. sizeof 与 strlen 的对比4.1 sizeof4.2 strlen4.3 sizeof…

ctf中php反序列化汇总

序列化与反序列化的概念 序列化就是将对象转换成字符串。字符串包括 属性名 属性值 属性类型和该对象对应的类名。 反序列化则相反将字符串重新恢复成对象。 对象的序列化利于对象的保存和传输,也可以让多个文件共享对象。 序列化举例&#xff1a;一般ctf题目中我们就是要将对…

02设置burpsuite代理

在日常工作之中&#xff0c;我们最常用的web客服端就是web浏览器&#xff0c;我们可以通过代理的设置&#xff0c;做到web浏览器的流量拦截&#xff0c;并且经过burpsuite代理的数据流量进行处理。 在火狐浏览器中安装foxyporxy

哥德尔不完备定理(Godel‘s Incompleteness Theorem) —— 奠定了计算机与 AI 的理论基础

哥德尔不完备定理 在数理逻辑中&#xff0c;哥德尔不完备定理是指库尔特・哥德尔于 1931 年证明并发表的两条定理。简单地说&#xff0c;第一条定理指出&#xff1a;任何相容的形式系统&#xff0c;只要蕴涵皮亚诺算术公理&#xff0c;就可以在其中构造在体系中既不能证明也不…