Vue 3 桌面应用开发(文末附视频)

news2025/2/28 5:19:09

在正式开始之前,我想先直接“输出”一些背景信息,既能阐明我的观点,也希望可以坚定你学习本小册的决心。

首先,桌面应用开发在未来一定会大放异彩,桌面应用相对于移动应用来说优势非常明显(交互区域更大、性能更好、输入输出设备更好),微软、谷歌等大厂都开始重新重视这个领域,并投入了大量人力物力研发基础框架。

其次,Electron 等框架把前端工程师进入这个领域的门槛降到足够低,且社区活跃,生态繁荣,优秀产品数不胜数,前端工程师可以从容使用自己熟悉的技能开发出优秀的桌面应用产品。

再次,由于前端从业者人数众多,导致“内卷”现象严重,掌握一项不同领域的技能可以让前端工程师成功“破圈”,避免“内卷”。

我们这本小册的目标就是带领大家轻松进入桌面开发领域的,让大家可以使用自己掌握的前端技能开发出优秀的桌面应用。

为什么要学习桌面应用开发?

其实,关于这个问题,我在《CEF 桌面软件开发实战》那本小册中已经详细分析过了。这里我就简单梳理和补充一些要点。

虽然桌面应用在便携性方面不如移动端,但不得不说 PC 端应用拥有它自己独特的优势,比如,更大的可视区域更快捷多样的输入输出接口更强劲的性能支持硬件等,现在 PC 端正在向着更专业、更精细的方向发展。而移动端应用则更偏向社交和娱乐属性。

可能有人会觉得桌面应用市场并不是被移动端蚕食的,而是被 Web 应用蚕食的,确实有这方面的原因,但仔细观察你就会发现:通过浏览器为用户提供服务太被动了,用户主动来找你,你才可以为他提供服务;用户不找你,你就没有机会,也没有能力为用户提供服务。但,这是浏览器的本质,任谁也改变不了,要想解决这个问题,办法只有一个,那就是:自己提供本地桌面应用

目前众多大厂也开始重新审视桌面应用的重要性,相继推出了各自的桌面应用研发框架,比如,微软的 MAUI 和 WebView2、谷歌的 Flutter-Desktop、JetBrains 的 Compose Multiplatform、GitHub 的 Electron 等,这些桌面端软件开发框架都是近几年才推出的,由此可见桌面应用开发领域将再次繁荣。

综上分析,掌握 PC 端开发的技能是非常有必要、非常有前景的。

为什么选择 Electron 开发桌面应用?

Electron 内部封装了 Chromium 浏览器核心和 Node.js,而且还为开发者暴露出了很多必要的操作系统 API,有了它,前端开发者就可以使用前端开发技术来开发桌面应用了。(关于基于浏览器核心的桌面应用开发框架在技术上的优势,也请参见这篇文章,这里我们就不再赘述了。)

我们知道前端技术是现如今软件开发领域应用最广泛的技术之一,且入门门槛非常低、生态繁荣、社区活跃,相对于使用 C/C++ 开发桌面软件来说,使用 Electron 开发桌面应用更容易上手,且开发效率更高。

使用 C/C++ 语言开发桌面应用有很多与开发效率有关的问题,比如:C++ 没有垃圾回收机制,开发人员要小心翼翼地控制内存,以免造成内存泄露;C++ 语言特性繁多且复杂,学习难度曲线陡峭,需要针对不同平台进行编译,应用分发困难等。而使用 Electron 开发桌面应用则不用担心这些问题。

有些人可能会担心前端技术执行效率会比 C/C++ 差,不可否认确实会有性能上的差距,但如果前端代码写得足够优秀,是完全可以做到与 C++ 应用相媲美的用户体验,Visual Studio Code 就是先例。再加上,Node.js 本身也可以很方便地调用 C++ 扩展,Electron 应用内又包含 Node.js 环境,对于一些音视频编解码或图形图像处理需求,也可以使用 Node.js 的 C++ 扩展来完成。

由于 Electron 内置了 Chromium 浏览器,该浏览器对各项前端标准都支持得非常好,甚至有些标准尚未通过,Chromium 浏览器就已经支持了,所以基于 Electron 开发应用不会遇到浏览器兼容性问题。开发者的自由度得到了最大程度的保护,你几乎可以在 Electron 中使用所有 HTML5、CSS3 、ES6 标准中定义的 API。

除此之外,Electron 可以使用几乎所有的 Web 前端生态领域及 Node.js 生态领域的组件和技术方案。目前发布到 npmjs.com 平台上的模块已经超过 100 万个,覆盖领域广、优秀模块繁多且使用非常简单方便。

当然,Electron 也并不是没有竞品的,比如 NW.js,但 NW.js 与 Electron 相比,在稳定性、周边工具完善度、社区活跃程度上都相差非常大。

以上这些就是我们最终选择 Electron 开发桌面应用的原因。

为什么选择 Vue 和 Vite 来开发界面?

前端开发者常用的开发框架主要是 Vue 和 React,这两个框架可以说各有所长,从第三方对比测试报告来看,Vue 在性能、内存占用等方面稍好于 React,我个人认为 Vue 在开发模式、API 设计、语法等方面也更容易使用,再加上国内 Vue 开发社区也非常繁荣,所以,本小册前端开发框架选择了 Vue

但这并不是说 Vue 就比 React 好,前端技术选型时还是应该选择最适合团队和产品的框架,而不应该单单对比这几个要素就做出决策。

目前主流的现代前端框架都使用 Webpack 作为构建工具,Webpack 非常强大、稳定且可定制性非常高,Vue 2.x 也使用 Webpack 作为构建工具,自 Vue 3.0 起,Vue 的作者尤雨溪就为开发者提供了一个不同构建工具:Vite,以另一种更现代化、更高效的技术方案实现了 Webpack 的大部分功能。

它与 Webpack 的主要区别在于,使用 Vite 构建的开发环境,在开发过程中不存在捆绑(bundle)过程。源代码中的 import 语句会直接以 script module 的形式提供给浏览器,Vite 内置的开发服务会拦截模块请求并在必要时执行代码转换。例如,页面渲染一个名为 component.vue 的文件时,Vite 内置的开发服务会接到页面的请求,然后动态编译这个 component.vue 文件,再把编译结果响应给页面。

这就带来了以下几个好处

  • 由于不需要做捆绑工作,服务器冷启动速度非常快。

  • 代码是按需编译的,因此只编译当前界面上实际导入的代码。你不必等到整个应用被捆绑后才开始开发,这对于拥有非常多界面的应用来说是一个巨大的性能提升。

  • 热更新(HMR)的性能与模块数量无关。这使得 HMR 始终快速,无论你的应用程序有多大。

不过需要说明一点,在开发过程中,使用 Vite 构建的项目在整个页面重新加载的性能上可能比基于绑定的 Webpack 项目稍微慢一些,因为基于 script module 的导入方式会导致大量的网络请求。但是由于这是本地开发,所以这点损耗可以忽略不计。(已经编译的文件会被缓存在内存中,所以请求这些文件时不存在编译损耗。)

另外,Vite 默认使用 esbuild 作为内置的编译器,esbuild 在将 TypeScript 转换为 JavaScript 的工作上性能表现优异,比常用的 tsc 工具快 20~30 倍,HMR 更新可以在 50ms 内反映在浏览器中。

以上就是我们选择 Vue 和 Vite 来开发界面的原因。

小册的主旨是什么?

我们这个小册只有一个主旨:带领你学会如何使用 Vite 开发一个基于 Vue 和 Electron 的桌面应用。如下图所示:

要实现这个目标并没有那么容易,因为要传递的知识非常多,而且涉及到多个不同的领域,所以接下来我们就简单梳理一下这些知识,让你在深入之前先有个初步的认识。

  • 首先,如何开发 Vite 插件。开发一个普通的 Vue 项目是不需要开发者掌握 Vite 插件开发知识的,因为 Vite 的作者已经帮我们把相关的插件都开发好了,我们只要按照默认的配置开发项目即可,但开发 Electron 项目则不然,我们要自己开发 Vite 插件用于开发环境的构建和编译打包 Electron 应用。

  • 其次,如何把 Vue 整合到 Electron 应用中。在这部分内容中,我们会介绍如何在 Electron 应用中使用vue-routerpinia 等库,以及如何使用前端技能管控应用的窗口等知识。

  • 接着,如何使用客户端数据库 SQLite。在这部分内容中,我们会继续讲解把 SQLite 整合到 Electron 应用中的知识,以及关系型数据库的基础知识等。

  • 最后,开发 Electron 桌面应用的其他必备知识。在这部分内容中,我们会介绍:如何开发、编译 Electron 的原生模块,如何分析、调试一个生产环境下的 Electron 应用,以及如何升级 Electron 应用等知识。

作者寄语

这十几年以来,我都在从事桌面应用开发领域的工作,也用过很多个桌面应用开发框架,可以负责任地说,Electron 是我用过的开发体验最好的桌面应用开发框架了,学习成本低、开发效率高、周边生态完善、各项技术成熟稳定,各种优点不一而足。

如果你对这个领域感兴趣,想尝试一下使用 Electron 开发桌面应用的体验,那么还等什么?跟我来吧,相信你定会不虚此行的。

视频讲解:Electron + Vue 3 桌面应用开发 - 刘晓伦liulun - 掘金小册可快速上手的 Electron 与 Vue 3 实战指南。「Electron + Vue 3 桌面应用开发」由刘晓伦liulun撰写,1253人购买https://s.juejin.cn/ds/kmKu8wh/

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

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

相关文章

TCP/IP网络编程(3)——地址族与数据序列

文章目录第 3 章 地址族与数据序列3.1 分配给套接字的 IP 地址与端口号3.1.1 网络地址(Internet Address)3.1.2 网络地址分类与主机地址边界3.1.3 用于区分套接字的端口号3.2 地址信息的表示3.2.1 表示 IPV4 地址的结构体3.2.2 结构体 sockaddr_in 的成员…

王道操作系统笔记(二)———— 进程与线程

文章目录一、进程的概念和特征1.1 进程的概念1.2 进程的组成1.3 进程的特征1.4 进程的状态与转换1.5 进程控制1.6 进程的通信1.6.1 共享存储1.6.2 消息传递1.6.3 管道通信1.7 父进程与子进程二、线程概念和多线程模型2.1 线程的概念2.2 线程的属性2.3 线程的实现方式2.4 多线程…

C#【必备技能篇】DatagridView添加行时,设置行标题单元格的值为行数

文章目录1、DatagridView添加行的代码2、方法一:【每次添加行都重新刷新了全部的行数,不推荐】3、方法二:【只有一个DatagridView时,推荐此方法】4、方法三:【通用方法,多个DatagridView都有这个需求时&…

利用 Burp Suite 进行密码爆破

利用 Burp Suite 进行密码爆破1.Intruder 功能介绍2.攻击类型3.实战4.验证码爆破1.Intruder 功能介绍 使用 BP 工具的 Intruder 模块高度可配置,可以对目标网站进行密码爆破,一般被用于网站的安全渗透测试场景 BP 工具的 Intruder 模块包含几个功能标签…

解决2022.3.1版本中 IDEA中 XML文件屎黄色背景 的方法

问题:在idea打开mybatis的xml映射文件,出现大面积黄色背景提示 1:打开文件,点击设置 2:打开编辑器--> 检查--> SQL 3:受不了,我的是中文,我换成英文继续了 找到 No data sou…

CDH6.3.2 ORC文件格式 Spark引擎查询数组越界异常

组件版本: flink1.13.2 cdh6.3.2 hive2.1.1 问题描述: CDH6.3.2 ORC文件格式 Spark引擎查询数组越界异常 java.io.IOException: java.lang.ArrayIndexOutOfBoundsException: 7 ‘org.apache.orc.impl.ReaderImpl::ReaderImpl.java:385’, org.apache.hadoop.hive.ql.io.orc.Re…

解决OBS录屏模糊问题

相信大家在使用OBS过程中也会遇到录屏模糊的问题,网上有很多配置教程,尝试了视频比特率、提高OBS当中其他的硬件参数。 模糊是要分情况的,如果是静态情况下模糊,就是屏幕不动的时候录制的视频也很模糊,那就是视频的基…

linux中使用KubeSphere和k8s 部署springboot项目

1、创建项目----》按照做的项目名称建 创建一个项目 创建后,如图所示: 2、工作负载---》就是创建服务容器Prod第一步:创建一个工作负载服务-->基本信息第二步:容器组设置 设置容器端口,健康检查,环境…

基于Gentoo发行版本的Calculate Linux 23发布

导读Calculate Linux 是一个为在组织环境中快速部署而优化的 Linux 发行版。它以 Gentoo Linux 项目为基础,包括许多预配置的功能。 Calculate Linux 以五种方式发布。Calculate Linux Desktop(CLD)、Calculate Directory Server(…

【涵子来信python大全】——第二季——opencv第三篇-numpy和颜色通道解释

各位亲爱的读者,博主: 大家好,我是涵子。今天我们继续讲讲opencv,讲讲其中numpy的秘密。如果不清楚上一章的内容,请从链接或者主页回去先读一遍之前的文章,否则今天的内容很难理解。 【涵子来信&pyth…

人工智能ai写作系统,ai智能写作机器人

人工智能AI大数据深度:基于伪原创算法,采用神经网络算法,在超过1535000篇文章中进行自动学习、聚合算法进行人工智能的创建,内容语义不变,媒体阿里、腾讯、百度均于日前在百家号内容创作者盛典上推出人工智能创作支撑平…

Vue2 Vuex在大型项目中的应用

文章目录前言一、总体结构二、代码结构1. 文件层2. 一级功能模块3. 二级功能模块4. 总状态总结前言 参考去年参与的大型ERP项目, 我主要负责财务模块的前端部分. 这个项目有几百个前端页面(具体多少没算过), 状态管理结构应该是具有参考价值的. 一、总体结构 项目标准中约定仅…

CobaltStrike与Metasploit联动方法

文章目录CobaltStrike联动Metasploit方法一方法二Metasploit联动CobaltStrikeCobaltStrike联动Metasploit CobaltStrike (简称CS)及 MetaSploit (简称MSF)各有所长,CS更适合作为稳控平台,MSF更适用于与各类…

包体积优化·工具论·初识包体积优化

“ 【小木箱成长营】包体积优化系列文章: 包体积优化 实战论 怎么做包体积优化? 做好能晋升吗? 能涨多少钱? 包体积优化 方法论 揭开包体积优化神秘面纱 ”一、引言 Hello,我是小木箱,欢迎来到小木箱成长营系列教程,今天将…

预制菜开启春节之战,破局立新正在进行时

撰稿 | 火华 来源 | 贝多财经 对预制菜行业来说,2022年绝对是浓墨重彩的一年。 这条汇集了餐饮企业、专业预制菜企业、冷冻食品企业、农牧水产企业、生鲜电商企业的赛道,在乏善可陈的商业市场中野蛮生长一路高歌。 有调研数据显示,“自己做…

嵌入式linux-僵尸进程?

1.僵尸进程 1.1 僵尸进程的由来和概念 通常,子进程结束之后,需要父进程为子进程进行回收,俗称“收尸”,则回收子进程占用的一些内存资源,父进程通过调用wait()(或其变体 waitpid()、waitid()等&#xff0…

公共数据 | CnOpenData中国省际铁路通行时间数据

中国省际铁路通行时间数据 一、数据简介 本数据来自南京大学长江产业经济研究院《全国统一大市场下的省际铁路交通研究报告》的附录部分。中国的铁路(高铁)建设取得了辉煌成果。但受铁路时刻众多、历史数据不容易搜集整理的限制,学术与政策研…

Linux进程状态和优先级

我的另一篇有关进程概念的博客:Linux 进程概念 目录 一、操作系统进程状态 1.1 运行状态(R) 1.2 阻塞状态(S) 1.3 挂起状态(S) 二、Linux操作系统内核中的进程状态 2.1 进程状态种类 2.2 查看R和S进程状态 2.3 T和t状态 2.3.1 T状态 2.3.2 t状态…

python正则表达式与回溯绕过waf

1.正则表达式的背景 正则表达式的历史:美国的两个人类神经元研究者,使用特殊的符号描述。之后有一位科学家将这门技术引入了数学,将这门技术命名为正则表示式。 肯汤普森在编写UNIX系统时,将正则引入到了一个编辑器 绝大多数编…

GNN实战——KarateClub数据集

GNN:graph neural network 图神经网络,是⼀种连接模型,通过⽹络中节点之间的信息传递(message passing)的⽅式来获取图中的依存关系(dependence of graph),GNN通过从节点任意深度的邻居来更新该节点状态,这个状态能够表…