Electron 可以让你使用纯 JavaScript 调用丰富的原生(操作系统) APIs 来创造桌面应用。 你可以把它看作一个专注于桌面应用的 Node. js 的变体,而不是 Web 服务器。

我的学习动机

前阵子用Node+Vue搞了一个小程序的发布系统,开发期间一直在本地跑直到完成全部功能准备部署到服务器才发现了一个问题,根据官方的api小程序想要发布必须要依赖开发者工具!微信开发者工具会在你的本地启一个web服务,我们获取到它的端口号然后配合api才能完成上传。。。这就陷入了一个非常尴尬的局面,他喵的小程序开发者工具没有能运行在linux服务器的版本!!!

考虑不周,考虑不周。。。下次注意,代码是死的人是活的,线上行不通就想办法搞到本地吧,那么问题来了,如何能以最简单的形式让其他人的电脑上方便快捷的使用这个系统?要是能搞成一个app装在电脑上就好了,可我也不会写app呀,咦。。。等等。。。我JS可是世界上最强大的语言,不如找找有没有办法能用JS写一个app的框架吧 ,结果还真有!!!好吧,我承认我孤陋寡闻了,Electron就这么出现在了我的视野中,既然要拿它搞事情那就先简单的学习一下吧。

什么是Electron?

Electron 是一个使用 JavaScript, HTML 和 CSS 等 Web 技术创建原生程序的框架,它负责比较难搞的部分,你只需把精力放在你的应用的核心上即可。实际上Electron就是将Chromium和Node.js合并到同一个运行时环境中,根据你的需要将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。Electron有多牛? 这么说吧VScode和Atom都是用它撸出来的。

了解Electron的主进程和渲染器进程

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

由于 Electron 使用了 Chromium 来展示 web 页面,所以 Chromium 的多进程架构也被使用到。 每个 Electron 中的 web 页面运行在它自己的渲染进程中。

在普通的浏览器中,web页面通常在一个沙盒环境中运行,不被允许去接触原生的资源。 然而 Electron 的用户在 Node.js 的 API 支持下可以在页面中和操作系统进行一些底层交互。

主进程使用 BrowserWindow 实例创建页面。 每个 BrowserWindow 实例都在自己的渲染进程里运行页面。 当一个 BrowserWindow 实例被销毁后,相应的渲染进程也会被终止。

主进程管理所有的web页面和它们对应的渲染进程。 每个渲染进程都是独立的,它只关心它所运行的 web 页面。

打造你的第一个Electron应用程序

从开发的角度来看, Electron application 本质上是一个 Node. js 应用程序。 与 Node.js 模块相同,应用的入口是 package.json 文件。 一个最基本的 Electron 应用一般来说会有如下的目录结构:

初始化项目

以下示例照搬官网
首先创建一个空文件夹,打开命令行切换到该目录下执行yarn init,注意这里我强烈推荐你使用yarn来安装本项目所需要的所有依赖,使用npm的话也许开发阶段不会有任何问题,但打包阶段会出现各种未知bug,但使用yarn会使你避免这些坑,别问为什么,因为我也不知道,当初打包各种失败的时候伟大的网友告诉我的, yarn 会帮助你创建一个基本的 package.json 文件。 其中的 main 字段所表示的脚本为应用的启动脚本,它将会在主进程中执行。 基本操作,没什么好说的,不懂得童鞋自行查找对应资料。
需要注意的:
如果package.json 中没有指定main的入口文件, Electron 将会尝试加载 index.js 文件(就像 Node.js 自身那样)。 Electron的启动命令是electron, 所以可以在script字段添加一个命令用来快速启动项目。如下:

安装 Electron

现在,你需要安装electron。把他作为项目中的开发依赖项,在app所在文件夹中运行下面的命令:
yarn add electron

开发一个简易的 Electron

首先在main.js内引入Electron模块,Electron提供了各种api使你可以调用一些原生的方法和ui,引入方法和普通的node模块一样。
const electron = require('electron')
electron 模块所提供的功能都是通过命名空间暴露出来的。 比如说: electron.app负责管理Electron 应用程序的生命周期, electron.BrowserWindow类负责创建窗口。 下面是一个简单的main.js文件,它将在应用程序准备就绪后打开一个窗口:

在 main.js 中创建窗口,并处理程序中可能遇到的所有系统事件。 下面我们将完善上述例子,添加以下功能:打开开发者工具、处理窗口关闭事件、在macOS用户点击dock上图标时重建窗口,添加后,main. js 就像下面这样:在这个文件中,你可以续写应用剩下主进程代码。也可以拆分成几个文件,然后用 require 导入。
最后,创建你想展示的 index.html:

启动你的应用

在创建并初始化完成 main.js、 index.html和package.json之后,您就可以在当前工程的根目录执行 npm start 命令来启动刚刚编写好的Electron程序了。

end

Electron 使用 web 页面作为它的 GUI,所以你能把它看作成一个被 JavaScript 控制的,精简版的 Chromium浏览器。本章介绍了Electron的基础使用,在下一篇会以实战的形式将现有发布系统转换为Electron应用的开发过程和使用到的一些api及中间遇到的坑进行着重介绍。同时欢迎大家关注公众号前端小苑,我会定期在这里发表原创文章。

JS是世界上最好的语言—— 使用Electron开发桌面应用(一)相关推荐

  1. php培训js重要么,php何以被戏称为“世界上最好的语言”?请看它与js的对比!...

    有位朋友已经自学了几个月的前端知识,js的基本语法掌握的也不错,现在因为项目需要想通过php从后台数据库哀求数据.他总是问我:php难学吗?如果我仅仅需要获取动态数据然后在前端展示,应该从哪里学起?因 ...

  2. JavaScript 是世界上最好的语言?

    JavaScript 是世界上最好的语言 可能对于不同的来说世界上最好的语言可能非常vary,但是对于我来说,JavaScript就是我心目中那个最好的语言,由最开始只是出于响应式编程的toy lan ...

  3. concet php_[PHP是世界上最好的语言] 不信你看这款PHP写的敲诈者木马

    有个笑话:女的说,你们能让论坛上的人吵起来,我就做你女朋友.男的发了一句话:PHP是世界上最好的语言.瞬间论坛就炸锅了,女的说好吧,我同意了,咱们去吃饭吧.男的:不!我一定要说服他们PHP必须是世界上 ...

  4. 世界上的程序语言已经这么多了,为什么还不够?

    程序语千百种,想要学 Coding 就必须先确定你的目的是什么,有的是拿来写 App 的,有的是专写操作系统,有的则是拿来写网页的 -- 各种不同的目的都有其最适合的语言. 常见的语言如 C++.Ja ...

  5. 世界上的程序语言已这么丰富,为什么还不够?

    本文作者 Chris Dannen 同时是知名科技媒体<Fast Company Digital> 和<FastCo.Labs> 的编辑,曾经做过管理顾问.户外运动的採访记者以 ...

  6. 世界上的程序语言那么丰富,还不够吗?

    [IT168 评论]程序语言百百种,想要学 Coding 就必须先确定你的目的是什么,有的是拿来写App的,有的是专写操作系统,有的则是拿来写网页的 -- 各种不同的目的都有其最适合的语言.常见的语言 ...

  7. python是最好的语言 永远二十岁_Python是世界上最好的语言吗?

    编程语言的选择是IT圈子永远的争议.在任意一个程序员聚集的场合,喊一句类似于"PHP是世界上最好的语言"这样的话,肯定会惹来不少人和你争论得面红耳赤.那么,python是世界上最好 ...

  8. php 7月世界排名2017,TIOBE2017榜单公布,PHP还会是世界上最好的语言吗?

    TIOBE 2017最新编程榜单 第1:java,第2:C,第3:C++....第6:php 看到这个榜单,我的记忆瞬间回到了十年前. 那时我结识了原配asp,asp代码真的好简单啊,看了遍<十 ...

  9. 为什么说python是世界上最好的语言-Python是世界上最好的语言 吗?

    编程语言的选择是IT圈子永远的争议.在任意一个程序员聚集的场合,喊一句类似于"PHP是世界上最好的语言"这样的话,肯定会惹来不少人和你争论得面红耳赤.那么,Python是世界上最好 ...

最新文章

  1. 关于继承构造器的调用
  2. Android7.0 PowerManagerService(2) WakeLock的使用及流程
  3. iOS 远程通知(Remote Notification)和本地通知(Local Notification)
  4. linux怎么删除exe文件夹,ubuntu linux 批量删除文件
  5. mySQL 数据库工具问题总结
  6. python查找路径代码_Python搜索路径
  7. Android Studio 设置主题及字体
  8. java16进制取前几位_16位16进制数怎么取前8位和后8位
  9. 01使用Python分析科比生涯数据
  10. 第三方短信验证码服务
  11. 远程桌面连接,运维工程师-必备软件【MultiDesk】
  12. php xml 修改节点值,.NET_XML文件修改节点属性值(多种方法),xml 文件内容: 复制代码 代码如 - phpStudy...
  13. 12f的接线 esp8266_ESP8266 系列最小系统版接线
  14. vscode免密登录需要更改authorized_keys的权限
  15. 中国区块链年度报告发布,腾讯竞争力排名第一!
  16. 区块链开发的权威指南
  17. 日本NTT Yamamoto教授荣获2022年兰姆奖
  18. 微信公众号第三方平台投票
  19. 小学计算机面试试讲题目,小学数学教师资格证面试试讲题目
  20. 厘米与英尺、英寸之间的换算

热门文章

  1. SQL删除一个数据库内所有表的数据保留表结构
  2. C++ 笔记 2 (C++ primer)
  3. 老生常谈JavaScript闭包
  4. overfitting
  5. GUI(三)一个菜单的程序
  6. tms570 can 接收大量数据_CAN通讯系列--CAN总线基础3
  7. UVA10943简单递推
  8. hdu4046 不错的线段树单点更新
  9. The 2014 ACM-ICPC Asia Mudanjiang Regional First Round J
  10. JavaScript原型与原型链(总结篇)