前言

先说几句废话,本人是一名 web 后端开发,主语言是 java,在学 Electron 之前,只会一点点 HTML和 JavaScript。本文讲的也是我学习 Electron 的过程,而非教程,请酌情参考。

Electron是什么

Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromiu 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。

前置准备

下面列举一下学 electron 之前需要掌握哪些技能:

  • 独立开发一个页面的能力

    HTML+ JS + CSS,这是必备技能

  • Node.js

    建议掌握。需要会安装 node 环境,剩下的 API 可以边用边学

因为 js 是弱类型语言,在缺少注释和约束的情况下,写时一时爽,维护。。。

而 TypeScript 的显式类型使代码可读性更高,更符合我使用 Java 时的习惯,所以又去学了 TypeScript。下面的讲解都基于 Electron + TypeScript,而非 Electron + JS,这个需要区分下。

开始学习

一阶段

Electron文档

按照官方文档学习,学习顺序如下:

  1. 安装 Electron

  2. Electron中的流程 部分

    了解 Electron 的流程模型(主进程和渲染器进程)、上下文隔离等。进程间通信可以看完教程部分再回来细看。

    在渲染器进程中无法使用 Node.js 和 Electron 的 API 是很难受的一点,下文细说。

  3. 教程 部分

    只学习基本要求、创建您的第一个应用程序、使用预加载脚本,其他的先略过

二阶段

完成了一阶段的学习,还是不知道如何打包一个桌面端程序。此时就轮到 electron-vite 登场了。

electron-vite 是一个新型构建工具,旨在为 Electron ****提供更快、更精简的开发体验。

创建基础工程

electron-vite 提供了多种模板,因为我使用 TypeScript 开发,也不打算引入 vue 等框架,所以使用的是 vanilla-ts 模板。

npm create @quick-start/electron my-app
√ Select a framework: » vanilla
√ Add TypeScript? ... Yes
√ Add Electron updater plugin? ... No
√ Enable Electron download mirror proxy? ... No

运行

按照提示,使用命令行进入到项目中,执行npm install安装依赖,然后执行npm run dev即可进行调试。

模板也集成了 VsCode 调试,在安装完依赖之后,用 VsCode 打开项目,按 F5 也可进行调试。

默认情况下,构建输出将放置在 my-app/out 文件夹中,

打包

npm run build:win

window 系统的打包一行命令搞定,生成的 exe 安装包在 my-app/dist 文件夹中

三阶段

在掌握了基础的 Electron API 和能将程序打包之后,就可以开始开发自己的程序了。

由于 Electron 的上下文隔离,Electron API 和 Node API 都无法在渲染器进程中使用,只能绕个弯,由主进程提供方法,渲染器进程通过预加载脚本的方式去调用。这就导致了一个问题,很多方法的实际执行都放在主进程中(渲染器进程只是调用),导致了主进程的卡顿,有没有大佬有好的解决方案?

对我来说,这就是一个面向搜索引擎编程的阶段。遇到问题,我一般用以下步骤处理:

  1. 只看搜索引擎第一页,没有就换种描述再搜,还没有就跳转步骤2
  2. 翻官方文档,大部分问题在官方文档中都能找到解决方案。这步需要点耐心,很多问题不是文档没写,而是没找对。
  3. 最后就是请教大神了

附上:提问的智慧

记录下新手容易遇到的坑

  1. 不要使用 window.alert 和 window.confirm 方法,会导致 input 框光标消失

    https://github.com/electron/electron/issues/20400

    解决方案是使用 Electron 的弹框 dialog.showMessageBoxSync()

  2. 有多个页面时,使用预加载脚本出错,提示找不到对应的js文件

    文档:多窗口应用程序

  3. 静态资源处理

  4. 不要阻塞主进程,耗时的任务开线程去做,否则会造成页面卡顿

    文档:Worker Threads

    注意在 Electron 中,web worker脚本可以使用 node api,但是不支持 Electron API,也不允许使用其他依赖 Electron API 的库,例如 electron-store

  5. 安装引导

    默认配置打包出来的安装包,运行就直接安装在默认路径了。可以去修改 electron-builder 中的 nsis配置

    # electron-builder.yml 文件
    nsis:
    oneClick: false # 创建一键安装程序还是辅助安装程序(默认是一键安装)
    allowElevation: true # 是否允许请求提升,如果为false,则用户必须使用提升的权限重新启动安装程序 (仅作用于辅助安装程序)
    allowToChangeInstallationDirectory: true # 是否允许修改安装目录 (仅作用于辅助安装程序)
    createStartMenuShortcut: true # 是否创建开始菜单快捷方式
    artifactName: ${name}-${version}-setup.${ext}
    shortcutName: ${productName}
    uninstallDisplayName: ${productName}
    createDesktopShortcut: always

    文档:electron-builder#nsis

总结

本文描述了笔者学习 Electron 并捣鼓出一个小工具的过程。

半个前端新手入门Electron的过程的更多相关文章

  1. 新手入门指导:Vue 2.0 的建议学习顺序

    起步 1. 扎实的 JavaScript / HTML / CSS 基本功.这是前置条件. 2. 通读官方教程 (guide) 的基础篇.不要用任何构建工具,就只用最简单的 <script> ...

  2. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  3. gulp的使用以及Gulp新手入门教程

    Gulp新手入门教程 原文  http://w3ctrain.com/2015/12/22/gulp-for-beginners/ Gulp 是一个自动化工具,前端开发者可以使用它来处理常见任务: 搭 ...

  4. Gulp新手入门教程

    Gulp 是一个自动化工具,前端开发者可以使用它来处理常见任务: 搭建web服务器 文件保存时自动重载浏览器 使用预处理器如Sass.LESS 优化资源,比如压缩CSS.JavaScript.压缩图片 ...

  5. 二向箔web安全学院 --新手入门

    二向箔安全学院 click here 新手入门|梦境穿越 1.要建立一个这样的观念|理解:计算机之所以是计算机,是它具有重复进行某种指令的特征,因而我们写的代码 or 脚本,本质上就是让计算机代替我们 ...

  6. 原创:从零开始,微信小程序新手入门宝典《一》

    为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习:一:微信小程序的特点张小龙:张小龙全面阐述小程序,推荐通读此文: 小程序是一种不需要下载.安装即可使用的 ...

  7. 【原创】新手入门一篇就够:从零开发移动端IM

    一.前言 IM发展至今,已是非常重要的互联网应用形态之一,尤其移动互联网时代,它正以无与论比的优势降低了沟通成本和沟通代价,对各种应用形态产生了深远影响. 做为IM开发者或即将成为IM开发者的技术人员 ...

  8. 课程上线 -“新手入门 : Windows Phone 8.1 开发”

    经过近1个月的准备和录制,“新手入门 : Windows Phone 8.1 开发”系列课程已经在Microsoft 虚拟学院上线,链接地址为:http://www.microsoftvirtuala ...

  9. discuz插件开发新手入门 超详细

    作为一个新手,目前也是刚刚玩转discuz的插件功能,好东西不敢独享,就拿出来大家一起分享入门的过程.现在网上很多关于discuz的插件教程都是很简单的教程,原因可能是这个东西是商业化的东西,本着分享 ...

  10. [转载]新手入门:Spring的一些学习方法及意见

    原文地址:新手入门:Spring的一些学习方法及意见作者:飞扬飞扬xyz Spring简介: 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您 ...

随机推荐

  1. 题解 P6745 『MdOI R3』Number

    前言 不知道是不是正解但是觉得挺好理解. 科学计数法 将一个数表示为\(a\times 10^x\) 的形式.其中\(a\leq10\),\(x\) 为整数. \(\sf Solution\) 其实这 ...

  2. dns隧道攻击原理及常用工具流量分析

    DNS协议是一种请求应答协议,也是一种可用于应用层的隧道技术.虽然DNS流量的异常变化可能会被发现,但是在基于传统socket隧道已经濒临淘汰,TCP.UDP通信大量被安全设备拦截的大背景下,DNS. ...

  3. MongoDB数据库新手入门

    windows安装mongodb 5.0.2 官网下载msi文件 自定义安装到 d:/apptoools/mongodb/ 不要勾选mongodb compass 报错:verify that you ...

  4. Redis管理及监控工具推荐

    推荐一款Redis管理软件.[官网 http://www.redisant.cn/] 功能描述: 1. 键和字段CRUD和glob. 2. 适用于字符串.列表.散列.集合.有序集合. 通过漂亮的用户界 ...

  5. 嵌入式-C语言基础:二维数组的地址写法

    二维数组a的有关指针: 表示形式                                含义                                                   ...

  6. 8 STL-stack

    ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录.总结.沉淀.同时希望对刷到的朋友有所帮助,一起加油哦!  生命就像一朵花,要拼尽全力绽放!死磕自个儿,身心愉悦! 写在前面,本篇章主要介绍S ...

  7. 【JVM调优】Day02:CMS的三色标记算法、分区的G1回收器、短时停顿的ZGC回收器

    一.CMS及其三色标记算法 1.核心 标记整个图谱的过程分为多步 多个线程相互工作,才能标记完 标记的算法,JVM虚拟机.go语言使用的都是三色标记算法 2.含义 从那个地方开始,用三种颜色替代 一开 ...

  8. 【每日一题】2021年12月6日-剑指 Offer 22. 链表中倒数第k个节点

    输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1.2.3.4.5.6 ...

  9. 巧如范金,精比琢玉,一分钟高效打造精美详实的Go语言技术简历(Golang1.18)

    研发少闲月,九月人倍忙.又到了一年一度的"金九银十"秋招季,又到了写简历的时节,如果你还在用传统的Word文档寻找模板,然后默默耕耘,显然就有些落后于时代了,本次我们尝试使用云平台 ...

  10. uniapp 微信小程序 引入 环信聊天

    最近项目需要实现一个聊天的功能,群聊或者单聊,用到环信,根据官网实现一下相关的配置吧 第一:下载环信demo  地址:https://github.com/easemob/webim-uniapp-d ...