前端技术在最近几年迅猛发展,在任何开发领域我们都能看到前端的身影,从PC端到手机端,从APP到小程序,似乎前端已经无所不能,这就要求我们需要不断地去学习来提升自己!前段时间尤大通过直播介绍了一下Vue3.0开发的心路历程并放话今年发布,Deno v1.0 的发布,扬言要干掉Node,摸了摸日渐稀疏的头发,表示真心学不动了,但摸了摸干瘪但口袋表示扶我起来我还能学!

接下来我们要说到但是一个可以开发桌面级应用的框架Electron。

先简单介绍一下Electron,它是由GitHub团队开发,目前在GitHub上star已经超过了83k,还是非常受欢迎的。

官方网站:https://www.electronjs.org/

GitHub地址:https://github.com/electron/electron

那Electron到底是个什么东西呢?官方网站首页用一句话为我们进行了概括:

使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序

从上面这句话我们可以看出,作为前端开发者,我们也可以根据基本的web开发语言来开发桌面级的应用,听起来还是很诱人的,但是还会诱人担心开发的软件会不会存在一些与原生语言开发的有差距呢?这点不必担心,很多大公司也都在用Electron进行开发并有许多非常成功的案例,如我们程序员用到的VSCode,Atom等就是基于Electron开发的。

接下来我们来看一张图来进一步搞清楚Electron:

从上图可以看出Electron基于了谷歌的内核Chromium,为我们提供了强大的UI支持,使我们不用再考虑各浏览器的兼容性问题。Node.js为我们提供了强大的后端服务支撑,可以非常方便的集成管理npm包,Native API为我们提供了多平台的统一API,可以在Windows,Mac和Linux等不同平台上进行运行。

接下来我们就通过Electron来从最基本的hello world开始进行开发。

首先我们需要安装Node.js,安装方式还是很简单的,在官网上找到下载地址一路确认即可安装成功。

官网地址:https://nodejs.org/zh-cn/

安装成功后我们在电脑的命令行工具中输入 node -v ,npm -v,如果这两个命令都返回相应的版本信息说明我们已经安装成功来,我们最好安装node v7 以上的版本。

Electron官方网站其实已经为我们初学者提供了一个简单的应用 https://www.electronjs.org/docs/tutorial/first-app#installing-electron,但是本着开发者的精神我们还是要一步一步地将代码进行敲打才能融入到脑子里,接下来本人写的代码可能跟官方的有些出入,但大体上是一致的。

首先我们在本地创建一个文件夹 electron-demo,然后进入该目录通过命令行的方式输入 npm init ,这样我们就初始化了一个node开发环境,并在文件夹下会生成一个package.json 的文件,如下:

然后我们通过命令行的方式引入electron包    npm install electron --save ,基于网络原因可能下载会慢一些,我们可以通过淘宝镜像的cnpm进行下载。

安装完成后我们在electron文件夹下创建index.html和index.js文件,最后目录结构如下:

我们在index.html内写入了一个最基本的hello world,就像我们平时写html文件一样,接下来就是重点的index.js文件了。

 const {app, BrowserWindow} = require('electron');

 function createWindow() {
// 创建浏览器窗口
let win = new BrowserWindow({
width: 800, // 宽
height: 600, // 高
webPreferences: { // 启用node可以在渲染进程中使用
nodeIntegration: true
}
}); // 并且为你的应用加载index.html
win.loadFile('index.html'); // 打开开发者工具
win.webContents.openDevTools(); // 将 win 置为 null,防止占用内存
win.on('closed', () => {
win = null;
});
} app.on('ready', () => {
createWindow();
});

在上面的代码中,我都加了注释,代码看起来其实并不复杂,就是引入electron,然后根据electron提供的方法打开一个800*600的窗口。

接下来我们看一下官方为我们提供的js写法:

 const {app, BrowserWindow} = require('electron')

 function createWindow() {
// 创建浏览器窗口
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
}) // 并且为你的应用加载index.html
win.loadFile('index.html') // 打开开发者工具
win.webContents.openDevTools()
} // Electron会在初始化完成并且准备好创建浏览器窗口时调用这个方法
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(createWindow) //当所有窗口都被关闭后退出
app.on('window-all-closed', () => {
// 在 macOS 上,除非用户用 Cmd + Q 确定地退出,
// 否则绝大部分应用及其菜单栏会保持激活。
if (process.platform !== 'darwin') {
app.quit()
}
}) app.on('activate', () => {
// 在macOS上,当单击dock图标并且没有其他窗口打开时,
// 通常在应用程序中重新创建一个窗口。
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
}) // 您可以把应用程序其他的流程写在在此文件中
// 代码 也可以拆分成几个文件,然后用 require 导入。

从上面官方提供的写法可以看出在 app启动和关闭时做了相应的操作,这些后续我们会逐步用到。

待index.js完成后我们再对package.json进行如下修改:

 {
"name": "electron-demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "electron ."
},
"author": "",
"license": "ISC",
"dependencies": {},
"devDependencies": {
"electron": "^9.0.5"
}
}

在 scripts 中增加了一个 start 的启动方式,接下来我们就可以通过  npm run start 来启动我们的demo项目来,最终的运行结果如下:

最后我们再来看一下整个项目的运行过程,当我们运行  npm run start 时其实是运行了 package.json 中 scripts 中的  electron . 的命令,然后hi通过 package.json 中的 main 字段找到 index.js,这个index.js 我们可以随便命名,一般命名为 main.js,本人只是在 npm init 的时候就用了默认的 index.js,当找到index.js后执行里面的代码,就是我们上面所说的执行electron创建一个窗口,通过 loadFile() 方法执行index.html文件,生成来一个我们想要的窗口应用。

我们可以理解为package.json中定义的入口文件main就是主进程,一般一个程序只有一个主进程,一个或多个线程,我们可以利用这一个主进程打开多个线程,即打开了多个类似于index.html的窗口。

从零开始学Electron笔记(一)的更多相关文章

  1. 从零开始学Electron笔记(四)

    在之前的文章我们介绍了一下Electron的这个remote模块,接下来我们继续说一下Electron的右键菜单的制作. 在我们日常我们使用的软件中都会存在右键菜单的情况,比如我们用到的浏览器,开发所 ...

  2. 从零开始学Electron笔记(二)

    在之前的文章我们简单介绍了一下Electron可以用WEB语言开发桌面级应用,接下来我们继续说一下Electron的菜单创建和事件绑定. 我们接上一章的代码继续编写,上一章代码 https://www ...

  3. 从零开始学Electron笔记(三)

    在之前的文章我们介绍了一下Electron的菜单创建和事件绑定,其中提到了一个remote模块,接下来我们继续说一下Electron的这个remote模块. 官方关于remote模块的地址:https ...

  4. 从零开始学Electron笔记(五)

    在之前的文章我们介绍了一下Electron的右键菜单的制作,接下来我们继续说一下Electron如何通过链接打开浏览器和嵌入网页. 现在有这样一个需求,我们要在我们的软件中加一个链接,然后点击该链接打 ...

  5. 从零开始学Electron笔记(六)

    在之前的文章我们介绍了一下Electron如何通过链接打开浏览器和嵌入网页,接下来我们继续说一下Electron中的对话框 Dialog和消息通知 Notification. 在之前的文章中其实我们是 ...

  6. 从零开始学Electron笔记(七)

    在之前的文章我们介绍了一下Electron中的对话框 Dialog和消息通知 Notification,接下来我们继续说一下Electron中的系统快捷键及应用打包. 全局快捷键模块就是 global ...

  7. 《Python 3.5从零开始学》笔记-第8章 面向对象编程

    前几章包括开启python之旅.列表和元组.字符串.字典.条件和循环等语句.函数等基本操作.主要对后面几章比较深入的内容记录笔记. 第8章 面向对象编程 8.3深入类 #!/usr/local/bin ...

  8. Mysql 5.5从零开始学阅读笔记

    第一章 1.什么是数据库? 数据库包含两层含义:保管数据的“仓库”,以及数据管理的方法和技术. 2.表 行被称为记录,列被称为字段 3.主键 primary key,用于唯一标识表中的每一条记录,主键 ...

  9. 从零开始学Java——个人笔记(持续更新中)

    从零开始学Java 学习流程 第一阶段:建立编程思想 Java概述 变量 运算符 控制结构 数组.排序和查找 面向对象编程(基础) 面向对象编程(中级) 项目&学习以致用 编程之乐 第二阶段: ...

随机推荐

  1. Java培训Day02——制作疫情地图(一)

    一.前言 此次培训,是为期三天的网上培训.最终的目的是制作出疫情地图.首先我们来看看主要的讲课内容大纲. Day1 |-Java语法学习(个人感觉讲得还可以,主要围绕本次培训作出的讲解,没有像网上的基 ...

  2. [每日一题2020.06.17] leetcode周赛T3 5438 制作m束花所需的最少天数 二分搜索

    题目链接 这题我开始一直在想如何在数组上dp操作搜索区间, 很蠢, 实际上用二分查找的方法可以很快的解决 首先我们通过一个函数判断第x天是否符合题意, 如果x天可以做出m束花, 那么大于m的天数必然可 ...

  3. C++值元编程

    --永远不要在OJ上使用值元编程,过于简单的没有优势,能有优势的编译错误. 背景 2019年10月,我在学习算法.有一道作业题,输入规模很小,可以用打表法解决.具体方案有以下三种: 运行时预处理,生成 ...

  4. 使用python解线性矩阵方程(numpy中的matrix类)

    这学期有一门运筹学,讲的两大块儿:线性优化和非线性优化问题.在非线性优化问题这里涉及到拉格朗日乘子法,经常要算一些非常变态的线性方程,于是我就想用python求解线性方程.查阅资料的过程中找到了一个极 ...

  5. 精美图文讲解Java AQS 共享式获取同步状态以及Semaphore的应用

    | 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it ...

  6. java递归遍历树结构目录

    目录实体 private int id; private int pid; private String name; 递归遍历方法 private void getTree(Menu menu ,Li ...

  7. Azure AD B2C(二)使用Azure AD B2C为ASP.NET Core 应用设置社交帐户(邮箱)登录/注册

    一,引言 上次关于Azure AD B2C 讲到一些概念,有介绍到,Azure AD B2C 也是一种身份验证的解决方案,但是它运行客户使用其首选的社交,企业或者本地账户标识对应用程序和API进行单一 ...

  8. Shiro密码重试次数限制

    如在 1 个小时内密码最多重试 5 次,如果尝试次数超过 5 次就锁定 1 小时,1 小时后可再次重试,如果还是重试失败,可以锁定如 1 天,以此类推,防止密码被暴力破解.我们通过继承 HashedC ...

  9. ps学习。

    ps软件及教程,这些东西,你应该要花一辈子来消化.

  10. CF #640 (div4)

    CF640 div4 草 迟到半个月的补题 真正的懒狗 再懒就无了 D. Alice, Bob and Candies 题意:n个数字,奇数时间从左侧删数字,偶数时间从右侧删数字,每次删的数字之和必须 ...