Spring Boot + Vue 如此强大?竟然可以开发基于 C/S 架构的应用

十年跨平台开发,Electron 凭什么占据一席之地? 其实一直想系统的写一写 Electron 相关的文章,之前在掘金上写过,但是现在来看那些文章都写得挺粗糙的,所以现在我决定系统整理相关的知识,输出自己更多 Electron 开发相关的经验。这一节我们主要是来认识一下 Electron,这个已经有 10 年历史的跨端开发框架。我将从诞生背景,优劣势,生态,案例以及和其他框架的对比这几个方面带大家来认识 Electron。 阅读详情

来源:xiangzhihong

sf.gg/a/1190000021376934

  • 环境搭建

  • Electron源码目录

  • 应用工程目录

  • 综合示例

    • 1,网易云音乐

    • 2,qq音乐播放器


虽然B/S是目前开发的主流,但是C/S仍然有很大的市场需求。受限于浏览器的沙盒限制,网页应用无法满足某些场景下的使用需求,而桌面应用可以读写本地文件、调用更多系统资源,再加上Web开发的低成本、高效率的优势,这种跨平台方式越来越受到开发者的喜爱。

Electron是一个基于Chromium和 Node.js,使用 HTML、CSS和JavaScript来构建跨平台应用的跨平台开发框架,兼容 Mac、Windows 和 Linux。目前,Electron已经创建了包括VScode和Atom在内的大量应用。

环境搭建

创建Electron跨平台应用之前,需要先安装一些常用的工具,如Node、vue和Electron等。

安装Node

进入Node官网下载页http://nodejs.cn/download/,然后下载对应的版本即可,下载时建议下载稳定版本。如果安装Node使用Homebrew方式,建议安装时将npm仓库镜像改为淘宝镜像,如下所示。

npm config set registry http://registry.npm.taobao.org/
或者
npm install -g cnpm --registry=https://registry.npm.taobao.org

安装/升级vue-cli

先执行以下命令,确认下本地安装的vue-cli版本。

vue -V

如果没有安装或者不是最新版,可以执行以下命令安装/升级。

npm install @vue/cli -g

安装Electron

使用如下命令安装Electron插件。

npm install -g electron
或者
cnpm install -g electron

为了验证是否安装成功,可以使用如下的命令。

electron --version

创建运行项目

Electron官方提高了一个简单的项目,可以执行以下命令将项目克隆到本地。

git clone https://github.com/electron/electron-quick-start

然后在项目中执行如下命令即可启动项目。

cd electron-quick-start
npm install
npm start

启动后项目的效果如下图。除此之外,我们可以使用vue-cli脚手架工具来创建项目。

vue init simulatedgreg/electron-vue

然后根据下面的提示一步步选中选项即可创建项目,如下所示。

然后,使用npm install命令安装项目所需要的依赖包,安装完成之后,可以使用npm run dev或npm run build命令运行electron-vue模版应用程序,运行效果如下图所示。

Electron源码目录

Electron 的源代码主要依据 Chromium 的拆分约定被拆成了许多部分。为了更好地理解源代码,您可能需要了解一下 Chromium 的多进程架构。Electron源码目录结构和含义具体如下:

Electron
├──atom - Electron 的源代码
|  ├── app - 系统入口代码
|  ├── browser - 包含了主窗口、UI 和其他所有与主进程有关的东西,它会告诉渲染进程如何管理页面
|  |   ├── lib - 主进程初始化代码中 JavaScript 部分的代码
|  |   ├── ui - 不同平台上 UI 部分的实现
|  |   |   ├── cocoa - Cocoa 部分的源代码
|  |   |   ├── gtk - GTK+ 部分的源代码
|  |   |   └── win - Windows GUI 部分的源代码
|  |   ├── default_app - 在没有指定 app 的情况下 Electron 启动时默认显示的页面
|  |   ├── api - 主进程 API 的实现
|  |   |   └── lib - API 实现中 Javascript 部分的代码
|  |   ├── net - 网络相关的代码
|  |   ├── mac - 与 Mac 有关的 Objective-C 代码
|  |   └── resources - 图标,平台相关的文件等
|  ├── renderer - 运行在渲染进程中的代码
|  |   ├── lib - 渲染进程初始化代码中 JavaScript 部分的代码
|  |   └── api - 渲染进程 API 的实现
|  |       └── lib - API 实现中 Javascript 部分的代码
|  └── common - 同时被主进程和渲染进程用到的代码,包括了一些用来将 node 的事件循环
|      |        整合到 Chromium 的事件循环中时用到的工具函数和代码
|      ├── lib - 同时被主进程和渲染进程使用到的 Javascript 初始化代码
|      └── api - 同时被主进程和渲染进程使用到的 API 的实现以及 Electron 内置模块的基础设施
|          └── lib - API 实现中 Javascript 部分的代码
├── chromium_src - 从 Chromium 项目中拷贝来的代码
├── docs - 英语版本的文档
├── docs-translations - 各种语言版本的文档翻译
├── spec - 自动化测试
├── atom.gyp - Electron 的构建规则
└── common.gypi - 为诸如 `node` 和 `breakpad` 等其他组件准备的编译设置和构建规则

平时开发时,需要重点关注的就是src、package.json和appveyor.yml目录。除此之外,其他需要注意的目录如下:

  • script - 用于诸如构建、打包、测试等开发用途的脚本

  • tools - 在 gyp 文件中用到的工具脚本,但与 script 目录不同, 该目录中的脚本不应该被用户直接调用

  • vendor - 第三方依赖项的源代码,为了防止人们将它与 Chromium 源码中的同名目录相混淆, 在这里我们不使用 third_party 作为目录名

  • node_modules - 在构建中用到的第三方 node 模块

  • out - ninja 的临时输出目录

  • dist - 由脚本 script/create-dist.py 创建的临时发布目录

  • external_binaries - 下载的不支持通过 gyp 构建的预编译第三方框架

应用工程目录

使用electron-vue模版创建的Electron工程结构如下图。和前端工程的项目结构类似,Electron项目的目录结构如下所示:

  • electron-vue:Electron模版配置。

  • build:文件夹,用来存放项目构建脚本。

  • config:中存放项目的一些基本配置信息,最常用的就是端口转发。

  • node_modules:这个目录存放的是项目的所有依赖,即 npm install 命令下载下来的文件。

  • src:这个目录下存放项目的源码,即开发者写的代码放在这里。

  • static:用来存放静态资源。

  • index.html:则是项目的首页、入口页,也是整个项目唯一的HTML页面。

  • package.json:中定义了项目的所有依赖,包括开发时依赖和发布时依赖。

对于开发者来说, 90% 的工作都是在 src 中完成,src 中的文件目录如下。Electron应用程序分成三个基础模块:主进程、进程间通信和渲染进程。

【主进程】

Electron 运行 package.json 的 main 脚本(background.js)的进程被称为主进程。在主进程中运行的脚本通过创建web页面来展示用户界面。一个 Electron 应用总是有且只有一个主进程。

【渲染进程】

由于 Electron 使用了 Chromium 来展示 Web 页面,所以 Chromium 的多进程架构也被使用到。每个 Electron 中的 Web 页面运行在它自己的渲染进程中。在普通的浏览器中,Web页面通常在一个沙盒环境中运行,不被允许去接触原生的资源。然而 Electron 允许用户在 Node.js 的 API 支持下可以在页面中和操作系统进行一些底层交互。

【主进程与渲染进程通信】

主进程使用 BrowserWindow 实例创建页面。每个 BrowserWindow 实例都在自己的渲染进程里运行页面。当一个 BrowserWindow 实例被销毁后,相应的渲染进程也会被终止。主进程管理所有的Web页面和它们对应的渲染进程。每个渲染进程都是独立的,它只关心它所运行的 Web 页面。

src目录结构

在Electron目录中,src会包包含main和renderer两个目录。

main目录

main目录会包含index.js和index.dev.js两个文件。

  • index.js:应用程序的主文件,electron 也从这里启动的,它也被用作 webpack 产品构建的入口文件,所有的 main 进程工作都应该从这里开始。

  • index.dev.js:此文件专门用于开发阶段,因为它会安装 electron-debug 和 vue-devtools。一般不需要修改此文件,但它可以扩展开发的需求。

渲染进程

renderer是渲染进程目录,平时项目开发源码的存放目录,包含assets、components、router、store、App.vue和main.js。

  • assets:assets下的文件如(js、css)都会在dist文件夹下面的项目目录分别合并到一个文件里面去。

  • components:此文件用于存放应用开发的组件,可以是自定义的组件。

  • router:如果你了解vue-router,那么Electron项目的路由的使用方式和vue-router的使用方式类似。

  • modules:electron-vue 利用 vuex 的模块结构创建多个数据存储,并保存在 src/renderer/store/modules 中。

综合示例

1,网易云音乐

electron-vue-cloud-music是一款使用Electron+Vue+Ant Design Vue技术开发跨平台桌面应用。下载链接:https://github.com/xiaozhu188/electron-vue-cloud-music。具有如下特点:

  • 拖拽播放

  • 桌面歌词

  • mini模式

  • 自定义托盘右键菜单

  • 任务栏缩略图,歌曲操作

  • 音频可视化

  • 自动/手动检查更新

  • Nedb数据库持久化

  • 自定义安装路径,安装界面美化

  • 浏览器中启动客户端

  • Travis CL,AppVeyor自动构建

  • 换肤,下载,本地歌曲匹配,网络变化桌面通知,分享歌曲/歌单/MV/视频等到QQ空间

  • 登录,私人Fm,歌单,专辑,歌手,排行榜,MV,视频,评论,搜索,用户,动态,粉丝,关注,云盘,收藏...

  • 心动模式,歌词微调,下一首播放,追加播放,单曲循环,随机播放,列表循环

  • 路由导向,局部刷新,首页栏目调整并持久化...

以下是部分运行效果:

2,qq音乐播放器

qq音乐播放器基于 electron-vue 开发的音乐播放器,界面模仿QQ音乐,使用的技术栈electron-vue+vue+vuex+vue-router+element- UI。可以使用如下的方式来运行项目。

git clone https://github.com/SmallRuralDog/electron-vue-music.git

cd electron-vue-music

npm install

# 运行开发模式
npm run dev

# 打包安装文件
npm run build

部分运行效果如下图。

(完)

推荐阅读

瞬间几千次的重复提交,我用 SpringBoot+Redis 扛住了

爬了知乎“神回复”,笑得根本停不下来

这 17 个 JVM 参数,高级 Java 必须掌握!

HTTP客户端连接,选择HttpClient还是OkHttp?

为什么建议使用你 LocalDateTime ,而不是 Date?


好文!必须点赞
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等 跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上,开发者需要为每个操作系统编写不同的代码,使用不同的开发工具和语言。而跨平台桌面应用开发框架通过抽象底层操作系统的差异,提供一套统一的API和工具,使开发者能够在一个代码库中编写应用程序,并将其部署到多个平台上。基于Web技术的跨平台桌面应用开发框架:这种框架使用Web前端技术,如HTML、CSS和JavaScript来构建桌面应用程序。 阅读详情

相关推荐

使用自定义方法实现 Electron 主/渲染进程的国际化功能

在 Electron 应用程序中实现国际化功能可以使应用程序支持多种语言,并为用户提供更好的用户体验。然而,本文将介绍如何在 Electron 的主进程和渲染进程中实现自定义的国际化功能,而不依赖于第三方库。这样,我们就实现了自定义的 Electron 主/渲染进程国际化功能。通过加载语言文件并在主进程和渲染进程之间进行通信,我们可以实现跨进程的国际化文本传递。请注意,本文仅提供了基本的实现方法,并没有涵盖所有的国际化需求。在实际应用中,可能还需要考虑更多的因素,例如动态切换语言、本地化日期和数字格式等。

AxCybersecurity的博客 758

Electron+Vue开发跨平台桌面应用

虽然B/S是目前开发的主流,但是C/S仍然有很大的市场需求。受限于浏览器的沙盒限制,网页应用无法满足某些场景下的使用需求,而桌面应用可以读写本地文件、调用更多系统资源,再加上Web开发的低成本、高效率的优势,这种跨平台方式越来越受到开发者的喜爱。 Electron是一个基于Chromium和 Node.js,使用 HTML、CSS和JavaScript来构建跨平台应用的跨平台开发框架,兼容 Mac...

xiangzhihong8的专栏 2555

FreeSWITCH安装指南:三种部署方式解析与实践对比

Freeswitch部署方案比较:Yum安装简单快捷但灵活性差;源码安装可定制性强,适合深度开发和性能优化;Docker部署环境一致性好但网络配置复杂。生产环境推荐源码安装以获得最佳性能和定制能力,而Docker适合快速部署和扩展。不同方案各有利弊,需根据具体需求选择。

c_zyer的博客 2147

【实战】学习 Electron:构建跨平台桌面应用

Electron 最早由 GitHub 开发,它允许开发者使用 Web 技术来构建桌面应用程序。Electron 基于 Node.js 和 Chromium,这两个都是开源项目,因此 Electron 有着丰富的生态系统和文档支持。使用 Electron,开发者可以创建使用 HTML、CSS 和 JavaScript 构建的跨平台桌面应用程序,这些应用程序可以在 Windows、macOS 和 Linux 上运行。

程序边界 1万+

从零做出可发布的2D冒险游戏!Unity全流程实战指南:从资源搭建到打包发布,新手也能跟着做

项目配置→资源导入→核心模块开发→关卡设计→调试→打包发布;玩家控制→敌人AI→道具系统→UI系统→游戏管理器→音效系统;新手开发重点:先实现核心玩法(移动、跳跃、攻击),再补充UI、音效、存档等辅助功能;调试是关键:每实现一个功能就测试,避免最后一堆bug难以定位。从零做一款完整的2D冒险游戏,能快速提升你的Unity综合能力——不仅能掌握C#编程、2D物理、UI系统,还能理解游戏开发的完整流程。先做出基础版,再慢慢迭代优化,你会发现游戏开发并没有想象中那么难。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1183

代码复现——SymAgent:一种用于知识图谱复杂推理的神经符号自学习Agent框架

根据《SymAgent: A Neural-Symbolic Self-Learning Agent Framework for Complex Reasoning over Knowledge Graphs》(《SymAgent:一种用于知识图谱复杂推理的神经符号自学习Agent框架》)论文思路,简单复现代码,以实现SymAgent中的Agent-Planner和Agent-Executor模块。Agent-Planner利用大语言模型的归纳推理能力从知识图谱中提取符号规则,指导高效的问题分解。

qq_60040306的博客 1607

Spring Boot + Vue 如此强大?竟然可以开发基于 C/S 架构的应用!

转载自:segmentfault.com/a/1190000021376934虽然B/S是目前开发的主流,但是C/S仍然有很大的市场需求。受限于浏览器的沙盒限制,网页应用无法满足某些场景...

macrozheng的专栏 1268

Windows Server+SqlServer Always On实战:5步搞定高可用集群搭建

本文详细介绍了在Windows Server环境中,通过5个关键步骤搭建SQL Server Always On高可用集群的实战指南。内容涵盖从底层故障转移集群配置、SQL Server实例启用Always On功能,到创建可用性组和侦听器的完整流程,并提供了核心运维与故障排查思路,帮助企业构建稳定可靠的数据库高可用架构。

milk5的博客 860

Spring Boot + Vue 如此强大?可以开发基于 C/S 架构的应用

关注“Java后端技术栈”回复“面试”获取最新资料回复“加群”邀您进技术交流群环境搭建Electron源码目录应用工程目录综合示例1,网易云音乐2,qq音乐播放器虽然B/S是目前开发的主...

田维常 494

从零开始搭建企业级安全扫描平台:基于Docker的Greenbone和ClamAV部署指南

本文提供了一份基于Docker容器技术,从零开始搭建企业级安全扫描平台的实战指南。详细介绍了如何部署和集成漏洞扫描工具Greenbone与病毒扫描工具ClamAV,涵盖架构设计、Docker环境优化、容器化部署步骤以及平台集成与监控方案,帮助企业构建自动化、可扩展的安全防御核心组件。

delta的博客 759

基于强化学习控制策略的三相逆变器仿真

强化学习控制器的核心在于定义状态空间、动作空间、奖励函数以及选择合适的强化学习算法(例如DQN、DDPG等)。对于三相逆变器,状态可以是输出电压、电流等信息;动作则可能是调制指数的变化量;奖励函数则应鼓励快速准确地跟踪参考信号。定义状态空间和动作空间状态空间可以包括逆变器的输出电压、电流及其变化率等信息。动作空间则是控制器可执行的动作,例如PWM信号的调整幅度。matlab深色版本% 定义状态和动作空间维度numObs = 6;% 假设有六个状态变量(例如三相电压和电流)

amy_mhd的博客 137
上一篇: 11张图:帮你搞定 Spring Bean 生命周期
下一篇: 狗屎一样的代码!快,重构我!
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值