翻译 | 《JavaScript Everywhere》第18章 带Electron的桌面应用程序javascript
你们好呀,我是毛小悠,是一位前端开发工程师。正在翻译一本英文技术书籍。html
为了提升你们的阅读体验,对语句的结构和内容略有调整。若是发现本文中有存在瑕疵的地方,或者你有任何意见或者建议,能够在评论区留言,或者加个人微信:code_maomao
,欢迎相互沟通交流学习。前端
(σ゚∀゚)σ..:*☆哎哟不错哦java
我第一次接触我的计算机是在一个充满Apple II
机器的学校实验室中进行的。node
每周一次,我和个人同窗被老师带进教室,给了一些软盘,并给出了有关如何加载应用程序(一般是Oregon Trail
)的粗略说明。在这些课程上,除了记得本身发呆以外,我对其余事情记不清了。自1980
年代中期以来,我的计算机已经走了很长一段路,可是咱们仍然须要依靠桌面应用程序来执行许多任务。git
一般,我可能会访问电子邮件客户端、文本编辑器、聊天客户端、电子表格软件、音乐流服务以及其余多个桌面应用程序。通常,这些应用程序具备与Web
应用程序等效的功能,可是桌面应用程序的便利性和集成性能够为用户带来不少好处。可是,多年来,建立这些应用程序的能力一直很是缺少。值得庆幸的是,今天,咱们可以使用网络技术来构建功能全面的桌面应用程序,并且学习曲线很小。github
在接下来的几章中,咱们将为Notedly
的社交笔记应用程序构建一个桌面客户端。咱们的目标是使用JavaScript
和Web
技术来开发桌面应用程序,用户能够下载并安装在计算机上。目前,该应用程序将是一个简单的实现,它将咱们的Web
应用程序包装在桌面应用程序shell
中。以这种方式开发咱们的应用程序将使咱们可以快速将桌面应用程序发送给感兴趣的用户,同时为咱们提供了之后为桌面用户引入自定义应用程序的灵活性。web
要构建咱们的应用程序,咱们将使用Electron
,它是一个开放源代码的框架,用于使用Web
技术构建跨平台的桌面应用程序。它能够利用Node.js
和Chrome
的基础浏览器引擎Chromium
来工做。shell
这意味着做为开发人员,咱们可使用浏览器、Node.js
和特定于操做系统的功能,而这些功能一般在Web
环境中不可用。Electron
最初是由GitHub
为Atom
文本编辑器开发的,但此后一直用做大小应用程序的平台,包括Slack
,VS Code
,Discord
和WordPress Desktop
。npm
在开始开发以前,咱们须要将项目启动程序文件复制到咱们的电脑上。
项目的源代码包含了开发应用程序所需的全部脚本和对第三方库的引用。
要将代码克隆到咱们的本地计算机,请打开终端,切换到保存项目的目录,而后git clone
项目存储库。若是你已经研究过API
和Web
章节,则可能已经建立了一个 notedly
目录来保持项目代码的有条理:
$ cd Projects $ # type the `mkdir notedly` command if you don't yet have a notedly directory $ cd notedly $ git clone git@github.com:javascripteverywhere/desktop.git $ cd desktop $ npm install
经过制做本书的入门代码的副本,并在目录中运行npm install
,你无需为任何第三方依赖项再次运行npm install
。
该代码的结构以下:
src
这是你随书一块儿进行开发的目录。
solutions
该目录包含每章的解决方案。
若是你卡住了,这些能够供你参考。
final
该目录包含最终的工做项目。
建立项目目录并安装依赖项以后,咱们就能够开始开发了。
将咱们的代码存储库克隆到咱们的电脑后,让咱们开发咱们的第一个Electron
应用程序。若是你在src
目录中查找,则会看到其中有一些文件。index.html
文件包含了HTML
标记。目前,该文件将用做Electron
的“渲染器过程”,这意味着它将是咱们Electron
应用程序显示为窗口的网页。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Notedly Desktop</title> </head> <body> <h1>Hello World!</h1> </body> </html>
咱们将在index.js
文件中设置咱们的Electron
应用程序。在咱们的应用程序中,该文件将包含Electron
所谓的“主进程”,它定义了应用程序shell
。主要过程经过在Electron
中建立一个BrowserWindow
实例来工做,该实例用做应用程序shell
。
在咱们的案例应用中的其余部分都是用的index.js
命名,可是一般在软件开发中命名main.js
来命名“主程序”。让咱们设置主要过程以显示包含HTML
页面的浏览器窗口。首先,导入Electron
的应用程序,而后写src/index
.js中的browserWindow
功能:
const { app, BrowserWindow } = require('electron');
如今,咱们能够定义应用程序的browserWindow
并定义应用程序将加载的文件。在src/index
.js中,添加如下内容:
const { app, BrowserWindow } = require('electron'); // to avoid garbage collection, declare the window as a variable let window; // specify the details of the browser window function createWindow() { window = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true } }); // load the HTML file window.loadFile('index.html'); // when the window is closed, reset the window object window.on('closed', () => { window = null; }); } // when electron is ready, create the application window app.on('ready', createWindow);
有了这个,咱们开始准备在本地运行咱们的桌面应用程序。在终端应用程序中,从项目目录中运行如下命令:
$ npm start
该命令将运行电子src/index
.js,启动咱们应用程序的开发环境版本(请参阅图18-1
)。
图18-1
。运行启动命令将启动咱们的“ Hello World
” Electron
应用程序
macOS
处理应用程序窗口的方式与Windows
不一样。当用户单击“关闭窗口”按钮时,应用程序窗口将关闭,但应用程序自己不会退出。单击macOS
扩展坞中的应用程序图标将从新打开应用程序窗口。Electron
容许咱们实现此功能。将如下内容添加到src/index
.js文件的底部:
// quit when all windows are closed. app.on('window-all-closed', () => { // On macOS only quit when a user explicitly quits the application if (process.platform !== 'darwin') { app.quit(); } }); app.on('activate', () => { // on macOS, re-create the window when the icon is clicked in the dock if (window === null) { createWindow(); } });
添加此功能后,你能够经过退出应用程序并使用npm start
命令从新运行它来查看这些更改。如今,若是用户正在使用macOS
访问咱们的应用程序,则他们在关闭窗口时将看到预期的行为。
因为Electron
基于Chromium
浏览器引擎(Chrome
,Microsoft Edge
,Opera
和许多其余浏览器),它还使咱们可以使用Chromium
的开发人员工具。这使咱们可以执行与浏览器环境中相同的全部的JavaScript
调试。让咱们检查咱们的应用程序是否处于开发模式,若是是,请在应用程序启动时自动打开开发工具。
要执行此检查,咱们将使用electronic-util
库。这是一小部分的实用程序,可以让咱们轻松检查系统条件并简化常见Electron的样式代码。
如今,咱们将使用is
模块,这将使咱们可以检查咱们的应用程序是否处于开发模式。
在咱们的src/index
.js文件的顶部,导入模块:
const { is } = require('electron-util');
如今,在咱们的应用程序代码中,咱们能够在window.loadFile
(index.html
) 加载咱们的HTML
文件,当应用程序处于开发环境中时,它将打开开发工具(图18-2
):
// if in development mode, open the browser dev tools if (is.development) { window.webContents.openDevTools(); }
图18-2
。如今,当咱们在开发过程当中打开应用程序时,浏览器开发工具将自动打开。
你可能会注意到,当前咱们的Electron
应用程序显示了与不安全的内容安全策略(CSP
)相关的安全警告。咱们将在下一章中解决此警告。
经过轻松访问浏览器开发工具,咱们为开发客户端应用程序作好了充分的准备。
桌面开发的优势之一是,经过Electron API
,咱们能够访问操做系统级别的功能,而这些功能在Web
浏览器环境中是不可用的,其中包括:
macOS
暗模式你能够想象,这些选项使咱们可以为桌面客户端添加一些独特的功能并改善用户体验。咱们不会在简单的示例应用程序中使用它们,可是你须要熟悉它们。Electron
的文档提供了每一个Electron API
的详细示例。此外,Electron
团队还建立了electron-api-demos
,这是一个功能齐全的Electron
应用程序,演示了Electron API
的许多独特功能。
在本章中,咱们探讨了使用Electron
经过Web
技术构建桌面应用程序的基础。Electron
环境为咱们(做为开发人员)提供了一个向用户提供跨平台桌面体验的机会,而无需学习多种编程语言和操做系统的复杂性。借助咱们在本章中探索的简单设置以及Web
开发的知识,咱们为构建健壮的桌面应用程序作好了充分的准备。在下一章中,咱们将研究如何将现有的Web
应用程序合并到Electron Shell
中。
若是有理解不到位的地方,欢迎你们纠错。若是以为还能够,麻烦你点赞收藏或者分享一下,但愿能够帮到更多人。