electron——初探
是什么?
- electron是由github开发,用html,css和javascript来构建跨平台桌面应用程序的一个开源库。
- electron通过将chromium和node.js合并到同一个运行时环境中,并将其打包为mac,windows和linux系统下的应用来实现这一目的。
为什么选择electron?
先来看一下官方的两句话
使用 javascript, html 和 css 构建跨平台的桌面应用
如果你可以建一个网站,你就可以建一个桌面应用程序。 electron 是一个使用 javascript, html 和 css 等 web 技术创建原生程序的框架,它负责比较难搞的部分,你只需把精力放在你的应用的核心上即可。
如果你是一个前端,你就明白这个有多简单了
哦,对了!或许你还不知道,visual studio code
、wordpress
和 slack
等客户端都是基于 electron 开发的。
1.可以用 web 前端技术开发跨平台的桌面客户端
这是 electron 最迷人的地方,究其根本是因为它是建立在 chromium
和 node
之上的,一个负责界面,一个负责背后的逻辑,有句话怎么说来着 你负责貌美如花,我负责赚钱养家
,所以electron 能够开发跨平台的桌面应用也就可以理解了。
作为一名前端小菜鸟来说:
- 可以用自己熟悉的方式去写应用界面,ps: 不要和我说什么java、c语言,鄙人行走江湖就一把js,遇到需求就是干,学好js,走遍天下都不怕(✿◡‿◡)
- 逻辑部分也还是 js,如果你精通 node ,那就更好了,后端也一并写了,ps: sorry,会js就是无所不能,我不是针对某个语言,我是说在座的所有,都是。。。(开玩笑,不要打我╥﹏╥...)
so,一个 web 前端开发者可以花很少的成本去上手 electron,而相比于以前开发多平台客户端的成本,利用 electron 开发多平台客户端的成本是极低的
2.可以从 node 的生态获得极大的助力
因为 electron 是基于 node 的,意味着,node 这个大生态下的模块,electron 也都可以用,这减少了很多造*的时间,你要写一些逻辑将首先思考有没有成熟的模块可以引入,而不是自己吭哧吭哧闭门造车,自己造时间精力会大量得被消耗,上路还可能翻车。
3.为什么需要客户端?
既然 electron 是用 web 技术写客户端,那么看上去 electron 要做的事,可以搬到网站上,为什么还要搬到客户端,这里有3个角度的回答:
- 用户角度: 客户端是一款独立的软件,其综合体验一般都是比网站高的,尤其是涉及到「工具」范畴的应用,此外,特定的用户群体也会有类似的使用习惯
- 发行方角度: 客户端是另一种产品形式,是一种产品的分发方式和入口,客户端可以实现很多本地应用独有的需求去触达用户,也能提供更加可靠的服务
- 开发角度: 终于...不用考虑浏览器兼容了!!!,chromium 也足够开发使用一些先进的 css 或 js 特性,我们现在还没计划引入 webpack 和 babel,因为现在好像够用,克制才是爱,除了写起来爽,对于开发来说,终于跳出了浏览器的沙盒,你可以自己去控制 electron 中的「浏览器」,莫名的开心
这些综合起来回答这个小节的问题就是,用 electron 开发客户端,用户体验好,开发麻烦小,功能更强大,世界更和平~~~
怎么用?
从开发的角度来看, electron application 本质上是一个 node. js 应用程序。 与 node.js 模块相同,应用的入口是 package.json 文件。 一个最基本的 electron 应用一般来说会有如下的目录结构:
your-app/ ├── package.json ├── main.js └── index.html
为你的新electron应用创建一个新的空文件夹。 打开你的命令行工具,然后从该文件夹运行npm init
npm init
npm 会帮助你创建一个基本的 package.json
文件。 其中的 main
字段所表示的脚本为应用的启动脚本,它将会在主进程中执行。 如下片段是一个 package.json
的示例:
{ "name": "your-app", "version": "0.1.0", "main": "main.js" }
注意:如果 main
字段没有在 package.json
中出现,那么 electron
将会尝试加载 index.js 文件(就像 node.js 自身那样)。 如果你实际开发的是一个简单的 node 应用,那么你需要添加一个 start
脚本来指引 node
去执行当前的 package:
{ "name": "your-app", "version": "0.1.0", "main": "main.js", "scripts": { "start": "electron ." } }
安装 electron
现在,您需要安装electron
。 我们推荐的安装方法是把它作为您 app 中的开发依赖项,这使您可以在不同的 app 中使用不同的 electron 版本。 在您的app所在文件夹中运行下面的命令:
npm install --save-dev electron
开发一个简易的 electron
electron apps 使用javascript开发,其工作原理和方法与node.js 开发相同。 electron模块包含了electron提供的所有api和功能,引入方法和普通node.js模块一样:
const electron = require('electron')
electron
模块所提供的功能都是通过命名空间暴露出来的。 比如说: electron.app
负责管理electron 应用程序的生命周期, electron.browserwindow
类负责创建窗口。 下面是一个简单的main.js
文件,它将在应用程序准备就绪后打开一个窗口:
const { app, browserwindow } = require('electron') function createwindow () { // 创建浏览器窗口 let win = new browserwindow({ width: 800, height: 600, webpreferences: { nodeintegration: true } }) // 加载index.html文件 win.loadfile('index.html') } app.on('ready', createwindow)
您应当在 main.js
中创建窗口,并处理程序中可能遇到的所有系统事件。 下面我们将完善上述例子,添加以下功能:打开开发者工具、处理窗口关闭事件、在macos用户点击dock上图标时重建窗口,添加后,main. js
就像下面这样:
const { app, browserwindow } = require('electron') // 保持对window对象的全局引用,如果不这么做的话,当javascript对象被 // 垃圾回收的时候,window对象将会自动的关闭 let win function createwindow () { // 创建浏览器窗口。 win = new browserwindow({ width: 800, height: 600, webpreferences: { nodeintegration: true } }) // 加载index.html文件 win.loadfile('index.html') // 打开开发者工具 win.webcontents.opendevtools() // 当 window 被关闭,这个事件会被触发。 win.on('closed', () => { // 取消引用 window 对象,如果你的应用支持多窗口的话, // 通常会把多个 window 对象存放在一个数组里面, // 与此同时,你应该删除相应的元素。 win = null }) } // electron 会在初始化后并准备 // 创建浏览器窗口时,调用这个函数。 // 部分 api 在 ready 事件触发后才能使用。 app.on('ready', createwindow) // 当全部窗口关闭时退出。 app.on('window-all-closed', () => { // 在 macos 上,除非用户用 cmd + q 确定地退出, // 否则绝大部分应用及其菜单栏会保持激活。 if (process.platform !== 'darwin') { app.quit() } }) app.on('activate', () => { // 在macos上,当单击dock图标并且没有其他窗口打开时, // 通常在应用程序中重新创建一个窗口。 if (win === null) { createwindow() } }) // 在这个文件中,你可以续写应用剩下主进程代码。 // 也可以拆分成几个文件,然后用 require 导入。
最后,创建你想展示的 index.html
:
<!doctype html> <html> <head> <meta charset="utf-8"> <title>hello world!</title> </head> <body> <h1>hello world!</h1> we are using node <script>document.write(process.versions.node)</script>, chrome <script>document.write(process.versions.chrome)</script>, and electron <script>document.write(process.versions.electron)</script>. </body> </html>
启动你的应用
在创建并初始化完成 main.js
、 index.html
和package.json
之后,您就可以在当前工程的根目录执行 npm start 命令来启动刚刚编写好的electron程序了。
参考文章:
上一篇: Win10修改管理员名称的方法