先来看一下官方的两句话
使用 javascript, html 和 css 构建跨平台的桌面应用
如果你可以建一个网站,你就可以建一个桌面应用程序。 electron 是一个使用 javascript, html 和 css 等 web 技术创建原生程序的框架,它负责比较难搞的部分,你只需把精力放在你的应用的核心上即可。
如果你是一个前端,你就明白这个有多简单了
哦,对了!或许你还不知道,visual studio code
、wordpress
和 slack
等客户端都是基于 electron 开发的。
这是 electron 最迷人的地方,究其根本是因为它是建立在 chromium
和 node
之上的,一个负责界面,一个负责背后的逻辑,有句话怎么说来着 你负责貌美如花,我负责赚钱养家
,所以electron 能够开发跨平台的桌面应用也就可以理解了。
作为一名前端小菜鸟来说:
so,一个 web 前端开发者可以花很少的成本去上手 electron,而相比于以前开发多平台客户端的成本,利用 electron 开发多平台客户端的成本是极低的
因为 electron 是基于 node 的,意味着,node 这个大生态下的模块,electron 也都可以用,这减少了很多造轮子的时间,你要写一些逻辑将首先思考有没有成熟的模块可以引入,而不是自己吭哧吭哧闭门造车,自己造时间精力会大量得被消耗,上路还可能翻车。
既然 electron 是用 web 技术写客户端,那么看上去 electron 要做的事,可以搬到网站上,为什么还要搬到客户端,这里有3个角度的回答:
这些综合起来回答这个小节的问题就是,用 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
。 我们推荐的安装方法是把它作为您 app 中的开发依赖项,这使您可以在不同的 app 中使用不同的 electron 版本。 在您的app所在文件夹中运行下面的命令:
npm install --save-dev 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.js
、 和
package.json
之后,您就可以在当前工程的根目录执行 npm start 命令来启动刚刚编写好的electron程序了。
参考文章:
electron,从玩玩具的心态开始,到打造出一款越来越优秀的桌面客户端产品
如对本文有疑问, 点击进行留言回复!!
selenium + ajax抓取英雄联盟全部英雄的详细信息及多线程保存全部皮肤图片到本地
网友评论