当前位置: 移动技术网 > IT编程>开发语言>JavaScript > electron——初探

electron——初探

2019年06月12日  | 移动技术网IT编程  | 我要评论

是什么?

  • electron是由github开发,用html,css和javascript来构建跨平台桌面应用程序的一个开源库。
  • electron通过将chromium和node.js合并到同一个运行时环境中,并将其打包为mac,windows和linux系统下的应用来实现这一目的。

为什么选择electron?

先来看一下官方的两句话

使用 javascript, html 和 css 构建跨平台的桌面应用

如果你可以建一个网站,你就可以建一个桌面应用程序。 electron 是一个使用 javascript, html 和 css 等 web 技术创建原生程序的框架,它负责比较难搞的部分,你只需把精力放在你的应用的核心上即可。

如果你是一个前端,你就明白这个有多简单了

哦,对了!或许你还不知道,visual studio codewordpressslack 等客户端都是基于 electron 开发的。

1.可以用 web 前端技术开发跨平台的桌面客户端

这是 electron 最迷人的地方,究其根本是因为它是建立在 chromiumnode 之上的,一个负责界面,一个负责背后的逻辑,有句话怎么说来着 你负责貌美如花,我负责赚钱养家,所以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
└── 

为你的新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
    }
  })

  // 加载文件
  win.loadfile('')
}

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
    }
  })

  // 加载文件
  win.loadfile('')

  // 打开开发者工具
  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 导入。

最后,创建你想展示的

<!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.jspackage.json之后,您就可以在当前工程的根目录执行 npm start 命令来启动刚刚编写好的electron程序了。

参考文章:

electron,从玩玩具的心态开始,到打造出一款越来越优秀的桌面客户端产品

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网