跳至主要内容

标签为“发布”的 44 篇文章

关于 Electron 新版本的博客文章

查看所有标签

Electron 1.0

·4 分钟阅读

在过去两年里,Electron 帮助开发者使用 HTML、CSS 和 JavaScript 构建跨平台桌面应用。现在,我们很高兴分享我们框架和创建社区的一个重要里程碑。Electron 1.0 版本现已在 electronjs.org 提供。


Electron 1.0

Electron 1.0 代表着 API 稳定性与成熟度的一个重要里程碑。该版本允许你构建在 Windows、Mac 和 Linux 上感觉真正原生的应用。借助新的文档、新的工具和一个引导你浏览 Electron API 的新应用,构建 Electron 应用比以往任何时候都更容易。

如果你准备构建你的第一个 Electron 应用,这里有一个快速入门指南可以帮助你开始。

我们很高兴看到你接下来用 Electron 构建什么。

Electron 的发展历程

两年多以前,当我们发布 Atom 时,也发布了 Electron。Electron 当时被称为 Atom Shell,是我们构建 Atom 的基础框架。那时,Atom 是 Electron 提供功能特性的主要驱动力,我们致力于推出 Atom 的初始版本。

现在推动 Electron 发展的是一个日益壮大的开发者和公司社区,他们使用 Electron 构建各种应用,从电子邮件聊天Git 应用SQL 分析工具种子客户端机器人

在过去的两年里,我们看到公司和开源项目都选择 Electron 作为其应用的基础。仅在过去一年,Electron 的下载量就超过 120 万次。浏览一下一些出色的 Electron 应用,如果你的应用不在其中,也请添加进来。

Electron downloads

Electron API 示例

随着 1.0 版本的发布,我们也在发布一个新的应用,帮助你探索 Electron API 并学习如何让你的 Electron 应用感觉更原生。Electron API 示例应用包含代码片段,可帮助你开始开发应用,并提供了有效使用 Electron API 的技巧。

Electron API Demos

Devtron

我们还添加了一个新的扩展来帮助你调试 Electron 应用。Devtron 是一个开源的 Chrome 开发者工具扩展,旨在帮助你检查、调试和解决 Electron 应用中的问题。

Devtron

功能

  • Require 图可帮助你可视化应用在主进程和渲染进程中的内部和外部库依赖关系
  • IPC 监视器可跟踪和显示应用中进程之间发送和接收的消息
  • 事件检查器可显示应用在窗口、应用和进程等核心 Electron API 上注册的事件和监听器
  • 应用 Linter 可检查你的应用中常见的错误和缺失的功能

Spectron

最后,我们正在发布 Spectron 的新版本,这是 Electron 应用的集成测试框架。

Spectron

Spectron 3.0 全面支持整个 Electron API,让你能够更快地编写测试,以验证应用在各种场景和环境中的行为。Spectron 基于 ChromeDriverWebDriverIO,因此也提供了页面导航、用户输入和 JavaScript 执行的完整 API。

社区

Electron 1.0 是数百名开发者共同努力的结果。除了核心框架外,还发布了数百个库和工具,使构建、打包和部署 Electron 应用变得更容易。

现在有一个新的社区页面,列出了许多正在开发的优秀 Electron 工具、应用、库和框架。你还可以查看 ElectronElectron Userland 组织,了解其中一些精彩的项目。

Electron 新手?观看 Electron 1.0 介绍视频

Electron 0.37 中的新特性

·4 分钟阅读

Electron 0.37 最近发布,其中包括从 Chrome 47 到 Chrome 49 的重大升级,以及几个新的核心 API。这个最新版本带来了 Chrome 48Chrome 49 中发布的所有新功能。这包括 CSS 自定义属性、增强的 ES6 支持、KeyboardEvent 改进、Promise 改进以及现在可在 Electron 应用中使用的许多其他新功能。


新特性

CSS 自定义属性

如果你使用过像 Sass 和 Less 这样的预处理器语言,你可能熟悉**变量**,它允许你为颜色方案和布局等定义可重用值。变量有助于保持你的样式表 DRY(Don't Repeat Yourself)并更易于维护。

CSS 自定义属性与预处理器变量类似,因为它们都是可重用的,但它们也具有独特的特性,使其更加强大和灵活:**它们可以通过 JavaScript 进行操作**。这个微妙但强大的功能允许对视觉界面进行动态更改,同时仍能受益于 CSS 的硬件加速,并减少前端代码和样式表之间的代码重复。

有关 CSS 自定义属性的更多信息,请参阅 MDN 文章Google Chrome 示例

CSS 变量实战

让我们来看一个简单的变量示例,可以在你的应用中实时调整。

:root {
--awesome-color: #a5ecfa;
}

body {
background-color: var(--awesome-color);
}

变量值可以直接在 JavaScript 中检索和更改

// Get the variable value ' #A5ECFA'
let color = window
.getComputedStyle(document.body)
.getPropertyValue('--awesome-color');

// Set the variable value to 'orange'
document.body.style.setProperty('--awesome-color', 'orange');

变量值也可以从开发工具的**样式**部分进行编辑,以便快速获得反馈和进行调整

CSS properties in Styles tab

KeyboardEvent.code 属性

Chrome 48 在 KeyboardEvent 事件中添加了新的 code 属性,该属性表示按下物理键的标识,独立于操作系统键盘布局。

这应该使得在 Electron 应用中实现自定义键盘快捷键在不同机器和配置下更准确和一致。

window.addEventListener('keydown', function (event) {
console.log(`${event.code} was pressed.`);
});

查看这个示例,看看它的实际效果。

Promise 拒绝事件

Chrome 49 添加了两个新的 window 事件,允许你在未处理的 Promise 被拒绝时收到通知。

window.addEventListener('unhandledrejection', function (event) {
console.log('A rejected promise was unhandled', event.promise, event.reason);
});

window.addEventListener('rejectionhandled', function (event) {
console.log('A rejected promise was handled', event.promise, event.reason);
});

查看这个示例,看看它的实际效果。

V8 中的 ES2015 更新

Electron 中现在使用的 V8 版本包含了 91% 的 ES2015 特性。以下是一些你可以直接使用的有趣新增功能——无需标志或预编译器

默认参数

function multiply(x, y = 1) {
return x * y;
}

multiply(5); // 5

解构赋值

Chrome 49 添加了解构赋值,使得变量和函数参数的赋值变得更加容易。

这使得 Electron 的 require 现在更简洁、更紧凑

主进程 Require
const { app, BrowserWindow, Menu } = require('electron');
渲染进程 Require
const { dialog, Tray } = require('electron').remote;
其他示例
// Destructuring an array and skipping the second element
const [first, , last] = findAll();

// Destructuring function parameters
function whois({ displayName: displayName, fullName: { firstName: name } }) {
console.log(`${displayName} is ${name}`);
}

let user = {
displayName: 'jdoe',
fullName: {
firstName: 'John',
lastName: 'Doe',
},
};
whois(user); // "jdoe is John"

// Destructuring an object
let { name, avatar } = getUser();

新的 Electron API

以下是一些新的 Electron API,你可以在Electron 版本发布的发布说明中查看每个新的 API。

BrowserWindow 上的 showhide 事件

当窗口显示或隐藏时,会触发这些事件。

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

let window = new BrowserWindow({ width: 500, height: 500 });
window.on('show', function () {
console.log('Window was shown');
});
window.on('hide', function () {
console.log('Window was hidden');
});

OS Xappplatform-theme-changed 事件

当系统深色模式主题切换时,会触发此事件。

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

app.on('platform-theme-changed', function () {
console.log(`Platform theme changed. In dark mode? ${app.isDarkMode()}`);
});

OS Xapp.isDarkMode()

如果系统处于深色模式,此方法返回 true,否则返回 false

OS X 的 BrowserWindow 上的 scroll-touch-beginscroll-touch-end 事件

当滚轮事件阶段开始或结束时,会触发这些事件。

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

let window = new BrowserWindow({ width: 500, height: 500 });
window.on('scroll-touch-begin', function () {
console.log('Scroll touch started');
});
window.on('scroll-touch-end', function () {
console.log('Scroll touch ended');
});

Electron 1.0 中即将进行的 API 变更

·4 分钟阅读

从 Electron 最初的版本开始,甚至远在它还叫做 Atom-Shell 的时候,我们一直在尝试为 Chromium 的内容模块和原生 GUI 组件提供一套良好的跨平台 JavaScript API。API 的设计最初非常有机,随着时间的推移,我们进行了一些改动来改进最初的设计。


现在随着 Electron 准备发布 1.0 版本,我们希望借此机会解决最后一些棘手的 API 细节问题。下面描述的改动已包含在 **0.35.x** 中,旧的 API 将报告废弃警告,以便你在未来的 1.0 版本发布前更新代码。Electron 1.0 将在几个月后发布,所以你在这些改动生效前还有一些时间。

废弃警告

默认情况下,如果你使用了废弃的 API,会显示警告。要关闭警告,可以将 process.noDeprecation 设置为 true。要跟踪废弃 API 使用的来源,可以将 process.throwDeprecation 设置为 true 以抛出异常而不是打印警告,或者将 process.traceDeprecation 设置为 true 以打印废弃的调用堆栈。

使用内置模块的新方式

内置模块现在被组合到一个模块中,而不是分离成独立的模块,这样你就可以避免与其他模块冲突来使用它们

var app = require('electron').app;
var BrowserWindow = require('electron').BrowserWindow;

旧的使用 require('app') 的方式为了向后兼容仍然支持,但你也可以将其关闭

require('electron').hideInternalModules();
require('app'); // throws error.

使用 remote 模块的更简单方式

由于使用内置模块的方式已经改变,我们简化了在渲染进程中使用主进程模块的方式。你现在可以直接访问 remote 的属性来使用它们

// New way.
var app = require('electron').remote.app;
var BrowserWindow = require('electron').remote.BrowserWindow;

不再需要使用冗长的 require 链

// Old way.
var app = require('electron').remote.require('app');
var BrowserWindow = require('electron').remote.require('BrowserWindow');

拆分 ipc 模块

ipc 模块同时存在于主进程和渲染进程中,并且两端的 API 不同,这对于新用户来说相当困惑。我们已将主进程中的模块重命名为 ipcMain,渲染进程中的模块重命名为 ipcRenderer,以避免混淆

// In main process.
var ipcMain = require('electron').ipcMain;
// In renderer process.
var ipcRenderer = require('electron').ipcRenderer;

对于 ipcRenderer 模块,接收消息时添加了一个额外的 event 对象,以匹配 ipcMain 模块处理消息的方式

ipcRenderer.on('message', function (event) {
console.log(event);
});

标准化 BrowserWindow 选项

BrowserWindow 选项的命名风格与其它 API 的选项不同,并且由于名称中的 - 在 JavaScript 中使用起来有些困难。它们现在已标准化为传统的 JavaScript 命名方式

new BrowserWindow({ minWidth: 800, minHeight: 600 });

遵循 DOM 的 API 命名约定

Electron 中的 API 名称过去倾向于对所有 API 名称使用 camelCase,例如将 Url 改为 URL,但 DOM 有其自己的约定,他们更喜欢 URL 而不是 Url,同时使用 Id 而不是 ID。我们已对以下 API 进行了重命名以匹配 DOM 的风格

  • Url 重命名为 URL
  • Csp 重命名为 CSP

由于这些改动,当你在应用中使用 Electron v0.35.0 时,你会注意到很多废弃警告。一个简单的修复方法是将所有 Url 替换为 URL

Tray 事件名称的更改

Tray 事件名称的风格与其他模块略有不同,因此进行了重命名以使其与其他模块匹配。

  • clicked 重命名为 click
  • double-clicked 重命名为 double-click
  • right-clicked 重命名为 right-click

Electron 新特性

·2 分钟阅读

Electron 最近有一些有趣的更新和演讲,这里进行一个汇总。


更新

截至 v0.32.0,Electron 已更新至 Chrome 45。其他更新包括...

改进的文档

new docs

我们重组并标准化了文档,使其外观和阅读体验更好。还有社区贡献的文档翻译,例如日语和韩语。

相关 Pull 请求:electron/electron#2028, electron/electron#2533, electron/electron#2557, electron/electron#2709, electron/electron#2725, electron/electron#2698, electron/electron#2649

Node.js 4.1.0

v0.33.0 起,Electron 集成了 Node.js 4.1.0。

相关 Pull 请求:electron/electron#2817

node-pre-gyp

依赖于 node-pre-gyp 的模块现在可以在从源代码构建时针对 Electron 进行编译。

相关 Pull 请求:mapbox/node-pre-gyp#175

支持 ARM

Electron 现在提供适用于 ARMv7 Linux 的构建版本。它可以在 Chromebook 和 Raspberry Pi 2 等热门平台上运行。

相关 Issues:atom/libchromiumcontent#138, electron/electron#2094, electron/electron#366

Yosemite 风格的无边框窗口

frameless window

@jaanus 贡献的补丁已合并,该补丁允许创建带有集成系统交通灯的无边框窗口,外观类似于 OS X Yosemite 及更高版本上的其他内置 OS X 应用。

相关 Pull 请求:electron/electron#2776

Google 编程之夏打印支持

在 Google 编程之夏之后,我们合并了 @hokein 贡献的补丁,以改进打印支持,并添加将页面打印为 PDF 文件的功能。

相关 Issues:electron/electron#2677, electron/electron#1935, electron/electron#1532, electron/electron#805, electron/electron#1669, electron/electron#1835

Atom

Atom 现已升级到运行 Chrome 44 的 Electron v0.30.6atom/atom#8779 正在进行 v0.33.0 的升级。

演讲

GitHub 员工 Amy PalamountainNordic.js 上发表了一个关于 Electron 的精彩介绍演讲。她还创建了 electron-accelerator 库。

Amy Palomountain:使用 Electron 构建原生应用

同样来自 Atom 团队的 Ben OgleYAPC Asia 发表了 Electron 演讲

Ben Ogle:使用 Web 技术构建桌面应用

Atom 团队成员 Kevin Sawicki 和其他人在最近的 湾区 Electron 用户组见面会上发表了关于 Electron 的演讲。视频已经发布,这里有两个精选视频

Kevin Sawicki:Electron 的历史

Ben Gotow:让 Web 应用感觉像原生应用