百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

手把手教你Electron + Vue实战教程(一)

ztj100 2025-02-17 15:04 6 浏览 0 评论


作者:Sufen

转发链接:
https://mp.weixin.qq.com/s/I1pgM_4rhMjS38fLxZKyMw

目录

手把手教你Electron + Vue实战教程(一)本篇

手把手教你Electron + Vue实战教程(二)

手把手教你Electron + Vue实战教程(三)

手把手教你Electron + Vue实战教程(四)

1 为什么要写这个系列教程

相信看到这篇文章的人,都是对Electron感兴趣的, 网上关于Electron的教程其实已经不少了,但是大多都是一些功能点的实现,对于从零开始搭建一个适合自己的项目,估计还是有不少人有点懵逼的。刚好自己也学习Electron一段时间了,想着整理一下自己学习期间的一些笔记和踩坑的地方,从零开始编写一个小项目。一个由浅入深(或者说从入门到放弃)的套路,一步步带你敲代码实现一个小项目,希望能给大家带来一点点启发。

2 项目搭建

网上有个比较火的脚手架electron-vue,github 上 12.2k 的 star,大家应该都听说过或者使用过,但现在我们不使用它,electron-vue是vue-cli2.0的版本,现在都已经出道 4.0 了,再者electron-vue已经很久没有更新,我们可以使用 vue 最新的脚手架加上插件
vue-cli-plugin-electron-builder来搭建项目,项目结构也更加清晰明了。好了不废话了,开撸吧……

2.1 用vue-cli创建一个项目

打开命令行工具,安装 node,安装 yarn,安装vue-cli脚手架,我这里使用的版本是:

MacBook-Pro:~?Bill$?node?-v
v12.16.1
MacBook-Pro:~?Bill$?yarn?-v
1.22.4
MacBook-Pro:~?Bill$?vue?-V
@vue/cli?4.3.1
MacBook-Pro:~?Bill$

vue-cli创建初始化项目:

vue?create?vue-electron-notes

我们选择自定义创建:

Vue?CLI?v4.3.1
??Please?pick?a?preset:
??default?(babel,?eslint)
??Manually?select?features

我们选择自定义创建,使用babel(语法编译器)、Router(路由)、CSS Pre-processors(css预处理器)、Linter / Formatter(代码风格、格式校验):

Vue?CLI?v4.3.1
??Please?pick?a?preset:?Manually?select?features
??Check?the?features?needed?for?your?project:
???Babel
???TypeScript
???Progressive?Web?App?(PWA)?Support
???Router
???Vuex
???CSS?Pre-processors
???Linter?/?Formatter
???Unit?Testing
???E2E?Testing

router我们使用history模式,输入y,进入下一步:

Vue?CLI?v4.3.1
??Please?pick?a?preset:?Manually?select?features
??Check?the?features?needed?for?your?project:?Babel,?Router,?Vuex,?CSS?Pre-processors,?Linter
??Use?history?mode?for?router??(Requires?proper?server?setup?for?index?fallback?in?production)?(Y/n)?y

css预处理器我这里选择Less,大家也可以选择自己喜欢的Sass、Stylus:

Vue?CLI?v4.3.1
??Please?pick?a?preset:?Manually?select?features
??Check?the?features?needed?for?your?project:?Babel,?Router,?Vuex,?CSS?Pre-processors,?Linter
??Use?history?mode?for?router??(Requires?proper?server?setup?for?index?fallback?in?production)?Yes
??Pick?a?CSS?pre-processor?(PostCSS,?Autoprefixer?and?CSS?Modules?are?supported?by?default):
??Sass/SCSS?(with?dart-sass)
??Sass/SCSS?(with?node-sass)
??Less
??Stylus

选择ESLint代码检查工具,我这里选择的是“ESLint + Airbnb config”,强烈建议大家一定要在项目内使用ESLint,一直用一直爽,懂的自然懂……该有的规范还是要遵循的:

Vue?CLI?v4.3.1
??Please?pick?a?preset:?Manually?select?features
??Check?the?features?needed?for?your?project:?Babel,?Router,?Vuex,?CSS?Pre-processors,?Linter
??Use?history?mode?for?router??(Requires?proper?server?setup?for?index?fallback?in?production)?Yes
??Pick?a?CSS?pre-processor?(PostCSS,?Autoprefixer?and?CSS?Modules?are?supported?by?default):?Less
??Pick?a?linter?/?formatter?config:
??ESLint?with?error?prevention?only
??ESLint?+?Airbnb?config
??ESLint?+?Standard?config
??ESLint?+?Prettier

选择什么时候执行ESLint检查,我这里两个都选了,保存时检查“Lint on save”,向仓库提交代码时也检查“Lint and fix on commit”,不符合规范的代码我们不允许提交到仓库:

Vue?CLI?v4.3.1
??Please?pick?a?preset:?Manually?select?features
??Check?the?features?needed?for?your?project:?Babel,?Router,?Vuex,?CSS?Pre-processors,?Linter
??Use?history?mode?for?router??(Requires?proper?server?setup?for?index?fallback?in?production)?Yes
??Pick?a?CSS?pre-processor?(PostCSS,?Autoprefixer?and?CSS?Modules?are?supported?by?default):?Less
??Pick?a?linter?/?formatter?config:?Airbnb
??Pick?additional?lint?features:
???Lint?on?save
???Lint?and?fix?on?commit

这里是询问 babel, postcss, eslint这些配置是单独的配置文件还是放在package.json 文件中,这里我们选择“In dedicated config files”单独放置:

Vue?CLI?v4.3.1
??Please?pick?a?preset:?Manually?select?features
??Check?the?features?needed?for?your?project:?Babel,?Router,?Vuex,?CSS?Pre-processors,?Linter
??Use?history?mode?for?router??(Requires?proper?server?setup?for?index?fallback?in?production)?Yes
??Pick?a?CSS?pre-processor?(PostCSS,?Autoprefixer?and?CSS?Modules?are?supported?by?default):?Less
??Pick?a?linter?/?formatter?config:?Airbnb
??Pick?additional?lint?features:?Lint?on?save,?Lint?and?fix?on?commit
??Where?do?you?prefer?placing?config?for?Babel,?ESLint,?etc.??(Use?arrow?keys)
??In?dedicated?config?files
??In?package.json

这里是最后的操作,是否保存该配置,如果你下次需要使用相同的配置,那么可以选择 yes,我这选择 no:

Vue?CLI?v4.3.1
??Please?pick?a?preset:?Manually?select?features
??Check?the?features?needed?for?your?project:?Babel,?Router,?Vuex,?CSS?Pre-processors,?Linter
??Use?history?mode?for?router??(Requires?proper?server?setup?for?index?fallback?in?production)?Yes
??Pick?a?CSS?pre-processor?(PostCSS,?Autoprefixer?and?CSS?Modules?are?supported?by?default):?Less
??Pick?a?linter?/?formatter?config:?Airbnb
??Pick?additional?lint?features:?Lint?on?save,?Lint?and?fix?on?commit
??Where?do?you?prefer?placing?config?for?Babel,?ESLint,?etc.??In?dedicated?config?files
??Save?this?as?a?preset?for?future?projects??(y/N)?no

执行完以上操作,剩下的我们等待项目下载依赖包,vue项目初始化就算搞定了哈。

cd vue-electron-notes进入项目跑一遍yarn serve,这个时候没什么问题就已经成功运行起来了!

2.2 在项目内集成Electron

进入我们项目的根目录,我们执行以下命令来安装插件
vue-cli-plugin-electron-builder

vue?add?vue-cli-plugin-electron-builder

我们选择版本^6.0.0:

???Successfully?installed?plugin:?vue-cli-plugin-electron-builder

??Choose?Electron?Version?(Use?arrow?keys)
??^4.0.0
??^5.0.0
??^6.0.0

这里静静等待安装即可,它会下载electron的依赖文件 60M 左右,过程可能有点长,跟你的网络息息相关……

在这等待安装的过程中,其实我们还可以再唠嗑唠嗑另一种页面可视化安装
vue-cli-plugin-electron-builder的方式,执行以下命令

vue?ui

这个时候会自动打开浏览器页面,然后选择左侧插件菜单,搜索安装插件即可:

我个人更偏向于使用命令安装,更加简单方便快捷,当然不管使用上面哪种安装方法,其结果是一致的。等安装完毕后会重新构建项目架构,在src目录下生成background.js文件,并且还新增了启动命令,如下图:

到这里其实还有一个小问题,插件安装的Electron是 6.0 版本的,但官方最新的版本其实已经到了8.2.5了,为了后续我们可以使用最新的api,我们需要执行命令更新一下版本:

yarn?add?electron@8.2.5?-D

到这一步,我们所有的安装都已经完成了,可以运行程序看效果了,要注意我们现在启动项目的命令已经变成这个了:

yarn?electron:serve

这个时候就已经会自动弹出一个程序了,终于大功告成了……

那个,再稍等一下呗,我们去看看刚才执行命令行的地方,是不是有这个警告??呀:

?DONE??Compiled?successfully?in?1339ms?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????1:52:39?PM

??File??????????????????????Size?????????????????????Gzipped

??dist_electron/index.js????651.77?KiB???????????????148.32?KiB

??Images?and?other?types?of?assets?omitted.

?INFO??Launching?Electron...
(electron)?The?default?value?of?app.allowRendererProcessReuse?is?deprecated,?it?is?currently?"false".??It?will?change?to?be?"true"?in?Electron?9.??For?more?information?please?check?[https://github.com/electron/electron/issues/18397](https://github.com/electron/electron/issues/18397)

有道翻译的结果是:allowrendererprocessreuse的默认值是不赞成的,它当前是“false”。在electron9中,它会变成“true”。(好吧我是个英语渣渣……)

为了解决以上告警,我们需要在主进程文件background.js中添加以下代码:

app.allowRendererProcessReuse?=?true

今天的项目搭建就先到这里,如果你觉得也还可以,就给点赞+关注

推荐Vue学习资料文章:

收集22种开源Vue模板和主题框架「干货」

如何写出优秀后台管理系统?11个经典模版拿去不谢「干货」

手把手教你实现一个Vue自定义指令懒加载

基于 Vue 和高德地图实现地图组件「实践」

一个由 Vue 作者尤雨溪开发的 web 开发工具—vite

是什么让我爱上了Vue.js

1.1万字深入细品Vue3.0源码响应式系统笔记「上」

1.1万字深入细品Vue3.0源码响应式系统笔记「下」

「实践」Vue 数据更新7 种情况汇总及延伸解决总结

尤大大细说Vue3 的诞生之路「译」

提高10倍打包速度工具Snowpack 2.0正式发布,再也不需要打包器

大厂Code Review总结Vue开发规范经验「值得学习」

Vue3 插件开发详解尝鲜版「值得收藏」

带你五步学会Vue SSR

记一次Vue3.0技术干货分享会

Vue 3.x 如何有惊无险地快速入门「进阶篇」

「干货」微信支付前后端流程整理(Vue+Node)

带你了解 vue-next(Vue 3.0)之 炉火纯青「实践」

「干货」Vue+高德地图实现页面点击绘制多边形及多边形切割拆分

「干货」Vue+Element前端导入导出Excel

「实践」Deno bytes 模块全解析

细品pdf.js实践解决含水印、电子签章问题「Vue篇」

基于vue + element的后台管理系统解决方案

Vue仿蘑菇街商城项目(vue+koa+mongodb)

基于 electron-vue 开发的音乐播放器「实践」

「实践」Vue项目中标配编辑器插件Vue-Quill-Editor

基于 Vue 技术栈的微前端方案实践

消息队列助你成为高薪 Node.js 工程师

Node.js 中的 stream 模块详解

「干货」Deno TCP Echo Server 是怎么运行的?

「干货」了不起的 Deno 实战教程

「干货」通俗易懂的Deno 入门教程

Deno 正式发布,彻底弄明白和 node 的区别

「实践」基于Apify+node+react/vue搭建一个有点意思的爬虫平台

「实践」深入对比 Vue 3.0 Composition API 和 React Hooks

前端网红框架的插件机制全梳理(axios、koa、redux、vuex)

深入Vue 必学高阶组件 HOC「进阶篇」

深入学习Vue的data、computed、watch来实现最精简响应式系统

10个实例小练习,快速入门熟练 Vue3 核心新特性(一)

10个实例小练习,快速入门熟练 Vue3 核心新特性(二)

教你部署搭建一个Vue-cli4+Webpack移动端框架「实践」

2020前端就业Vue框架篇「实践」

详解Vue3中 router 带来了哪些变化?

Vue项目部署及性能优化指导篇「实践」

Vue高性能渲染大数据Tree组件「实践」

尤大大细品VuePress搭建技术网站与个人博客「实践」

10个Vue开发技巧「实践」

是什么导致尤大大选择放弃Webpack?【vite 原理解析】

带你了解 vue-next(Vue 3.0)之 小试牛刀【实践】

带你了解 vue-next(Vue 3.0)之 初入茅庐【实践】

实践Vue 3.0做JSX(TSX)风格的组件开发

一篇文章教你并列比较React.js和Vue.js的语法【实践】

手拉手带你开启Vue3世界的鬼斧神工【实践】

深入浅出通过vue-cli3构建一个SSR应用程序【实践】

怎样为你的 Vue.js 单页应用提速

聊聊昨晚尤雨溪现场针对Vue3.0 Beta版本新特性知识点汇总

【新消息】Vue 3.0 Beta 版本发布,你还学的动么?

Vue真是太好了 壹万多字的Vue知识点 超详细!

Vue + Koa从零打造一个H5页面可视化编辑器——Quark-h5

深入浅出Vue3 跟着尤雨溪学 TypeScript 之 Ref 【实践】

手把手教你深入浅出vue-cli3升级vue-cli4的方法

Vue 3.0 Beta 和React 开发者分别杠上了

手把手教你用vue drag chart 实现一个可以拖动 / 缩放的图表组件

Vue3 尝鲜

总结Vue组件的通信

Vue 开源项目 TOP45

2020 年,Vue 受欢迎程度是否会超过 React?

尤雨溪:Vue 3.0的设计原则

使用vue实现HTML页面生成图片

实现全栈收银系统(Node+Vue)(上)

实现全栈收银系统(Node+Vue)(下)

vue引入原生高德地图

Vue合理配置WebSocket并实现群聊

多年vue项目实战经验汇总

vue之将echart封装为组件

基于 Vue 的两层吸顶踩坑总结

Vue插件总结【前端开发必备】

Vue 开发必须知道的 36 个技巧【近1W字】

构建大型 Vue.js 项目的10条建议

深入理解vue中的slot与slot-scope

手把手教你Vue解析pdf(base64)转图片【实践】

使用vue+node搭建前端异常监控系统

推荐 8 个漂亮的 vue.js 进度条组件

基于Vue实现拖拽升级(九宫格拖拽)

手摸手,带你用vue撸后台 系列二(登录权限篇)

手摸手,带你用vue撸后台 系列三(实战篇)

前端框架用vue还是react?清晰对比两者差异

Vue组件间通信几种方式,你用哪种?【实践】

浅析 React / Vue 跨端渲染原理与实现

10个Vue开发技巧助力成为更好的工程师

手把手教你Vue之父子组件间通信实践讲解【props、$ref 、$emit】

1W字长文+多图,带你了解vue的双向数据绑定源码实现

深入浅出Vue3 的响应式和以前的区别到底在哪里?【实践】

干货满满!如何优雅简洁地实现时钟翻牌器(支持JS/Vue/React)

基于Vue/VueRouter/Vuex/Axios登录路由和接口级拦截原理与实现

手把手教你D3.js 实现数据可视化极速上手到Vue应用

吃透 Vue 项目开发实践|16个方面深入前端工程化开发技巧【上】

吃透 Vue 项目开发实践|16个方面深入前端工程化开发技巧【中】

吃透 Vue 项目开发实践|16个方面深入前端工程化开发技巧【下】

Vue3.0权限管理实现流程【实践】

后台管理系统,前端Vue根据角色动态设置菜单栏和路由

作者:Sufen

转发链接:
https://mp.weixin.qq.com/s/I1pgM_4rhMjS38fLxZKyMw

相关推荐

告别手动操作:一键多工作表合并的实用方法

通常情况下,我们需要将同一工作簿内不同工作表中的数据进行合并处理。如何快速有效地完成这些数据的整合呢?这主要取决于需要合并的源数据的结构。...

【MySQL技术专题】「优化技术系列」常用SQL的优化方案和技术思路

概述前面我们介绍了MySQL中怎么样通过索引来优化查询。日常开发中,除了使用查询外,我们还会使用一些其他的常用SQL,比如INSERT、GROUPBY等。对于这些SQL语句,我们该怎么样进行优化呢...

9.7寸视网膜屏原道M9i双系统安装教程

泡泡网平板电脑频道4月17日原道M9i采用Win8安卓双系统,对于喜欢折腾的朋友来说,刷机成了一件难事,那么原道M9i如何刷机呢?下面通过详细地图文,介绍原道M9i的刷机操作过程,在刷机的过程中,要...

如何做好分布式任务调度——Scheduler 的一些探索

作者:张宇轩,章逸,曾丹初识Scheduler找准定位:分布式任务调度平台...

mysqldump备份操作大全及相关参数详解

mysqldump简介mysqldump是用于转储MySQL数据库的实用程序,通常我们用来迁移和备份数据库;它自带的功能参数非常多,文中列举出几乎所有常用的导出操作方法,在文章末尾将所有的参数详细说明...

大厂面试冲刺,Java“实战”问题三连,你碰到了哪个?

推荐学习...

亿级分库分表,如何丝滑扩容、如何双写灰度

以下是基于亿级分库分表丝滑扩容与双写灰度设计方案,结合架构图与核心流程说明:一、总体设计目标...

MYSQL表设计规范(mysql表设计原则)

日常工作总结,不是通用规范一、表设计库名、表名、字段名必须使用小写字母,“_”分割。...

怎么解决MySQL中的Duplicate entry错误?

在使用MySQL数据库时,我们经常会遇到Duplicateentry错误,这是由于插入或更新数据时出现了重复的唯一键值。这种错误可能会导致数据的不一致性和完整性问题。为了解决这个问题,我们可以采取以...

高并发下如何防重?(高并发如何防止重复)

前言最近测试给我提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。...

性能压测数据告诉你MySQL和MariaDB该怎么选

1.压测环境为了尽可能的客观公正,本次选择同一物理机上的两台虚拟机,一台用作数据库服务器,一台用作运行压测工具mysqlslap,操作系统均为UbuntuServer22.04LTS。...

屠龙之技 --sql注入 不值得浪费超过十天 实战中sqlmap--lv 3通杀全国

MySQL小结发表于2020-09-21分类于知识整理阅读次数:本文字数:67k阅读时长≈1:01...

破防了,谁懂啊家人们:记一次 mysql 问题排查

作者:温粥一、前言谁懂啊家人们,作为一名java开发,原来以为mysql这东西,写写CRUD,不是有手就行吗;你说DDL啊,不就是设计个表结构,搞几个索引吗。...

SpringBoot系列Mybatis之批量插入的几种姿势

...

MySQL 之 Performance Schema(mysql安装及配置超详细教程)

MySQL之PerformanceSchema介绍PerformanceSchema提供了在数据库运行时实时检查MySQL服务器的内部执行情况的方法,通过监视MySQL服务器的事件来实现监视内...

取消回复欢迎 发表评论: