Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Electron创建跨平台桌面应用

使用Electron创建跨平台桌面应用

作者头像
疯狂的技术宅
发布于 2019-03-27 07:08:01
发布于 2019-03-27 07:08:01
1.5K00
代码可运行
举报
文章被收录于专栏:京程一灯京程一灯
运行总次数:0
代码可运行

开发和维护一个桌面应用是比较复杂的,所以可以理解现在的公司门为何推动WEB应用或者各种跨平台版本,在过去的十几年里,已经有了很多尝试,Flash、Air、Java和Sliverlight,他们都各自取得了不同程度的成功

但是最主要的问题就是他们通常需要开发者学习另一种语言,或者强制用户安装插件带来的稳定性、性能和安全问题。

我们都知道现在出现了一些使用JavaScript和web技术来开发跨平台的桌面应用的方案。

Electron, GitHub提供的一种方案,我已经尝试的构建了几个应用。经过两年的开发,包括一次名字更改 (Atom shell), Electron发布了1.0版本,这已经是一个合适的机会来看看Electron有怎样的能力。

安装 Electron

Electron有 quick start project 和 pre-built releases 可用, 我们也可以使用 npm来安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`npm install electron-prebuilt -g`

Mac用户可以使用 HomeBrew 安装, via Cask:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`brew install Caskroom/cask/electron`

不管你使用哪种方式安装,你都会得到一个可执行的Electron二进制文件。

这个文件是用于打包并且运行你的Electron项目,你可以使用任何文本编辑器或者IDE来编写你的项目代码。

一个Electron项目包含三个文件:

  • index.html: 初始页面。
  • main.js: 用于启动应用并渲染页面。
  • package.json: 项目依赖信息。

例子:your need a hero

在这个例子里面我将会创建一个简单的应用,它会使用 Marvel API 拉取25位超级英雄的信息并且显示他们的名字和缩略图,创建完成之后的应用会有一个应用图标,最终使用的用户不会知道到应用是如何被创建的也不能看到程序的源代码。

你可以在 GitHub 找到这个项目的源代码。

打开 package.json 增加如下项目依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "name": "hero-browser",
  "version": "0.1.0",
  "main": "main.js",
  "dependencies": {
    "dotenv": "^2.0.0",
    "md5": "^2.1.0"
  }
}

这是一个和node.js项目有着相同格式的 package.json文件,在这里描述了应用名称、版本号、入口文件以及项目依赖。

增加完成之后运行 npm install安装项目依赖。

main.js 可以使用JavaScript代码操作计算机,本项目只是一个简单的例子,你可以在这里找到Electron更多的功能Electron’s documentation。

首先,我们先完成Electron项目必须项:创建app、浏览器窗口以及主窗口变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'use strict';

const electron = require('electron');
const app = electron.app;  // Module to control application life.
const BrowserWindow = electron.BrowserWindow;  // Module to create native browser window.
var mainWindow = null;

现在让我们处理当视窗关闭时应用程序退出,如果是OS X操作系统,当所有视窗关闭时 应用程序依旧处于打开状态,但是用户通常是为了退出应用程序,所以我们必须用如下方式处理这种场景。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.on('window-all-closed', function() {
    if (process.platform != 'darwin') { 
        app.quit();
    }
});

一旦Electron初始化就会创建一个浏览器窗口并且加载应用程序代码,当浏览器窗口关闭时 销毁窗口对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.on('ready', function() {
  mainWindow = new BrowserWindow({width: 800, height: 600});
  mainWindow.loadURL('file://' + __dirname + '/app/index.html');

  mainWindow.on('closed', function() {
    mainWindow = null;
  });
});

创建一个叫做 app的子文件夹,并且在 app/index.html文件中添加stylesheets样式表以及JavaScript文件并且构建界面HTML。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Marvel Super Hero Browser</title>
    <link href="css/index.css" rel="stylesheet" type="text/css"/>
</head>
<body>
    <h1>Marvel Super Hero Browser</h1>
    <em>Thanks to Marvel for their API.</em>

    <div id="character_list"></div>

    `<script src="js/index.js">`</script>
</body>
</html>

创建 app/css/index.css 并添加一些基本的样式布局。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#character_list .character img {
    width: 100px;
}

.character {
    float: left;
    padding: 25px;
    max-width: 100px;
}

创建 app/js/index.js,这里会有程序的主要功能。首先定义依赖和所需要的变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'use strict';

require('dotenv').config();
var md5 = require('md5');
var publicKey = process.env.MARVEL_PUBLIC_KEY;
var privateKey = process.env.MARVEL_PRIVATE_KEY;
var ts = String(new Date().getTime());
var hash = md5(ts+privateKey+publicKey);

var url = `https://gateway.marvel.com/v1/public/characters?ts=${ts}&apikey=${publicKey}&hash=${hash}&limit=25`;

使用Marvel API需要权限验证, 登录Marvel 然后 跟随这份指南获取所需要的三个参数,使用dotenv package库来管理配置文件, 验证所需要的的 privatekeypublickey存储在 .env文件中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MARVEL_PRIVATE_KEY=<PRIVATE_KEY>
MARVEL_PUBLIC_KEY=<PUBLIC_KEY>

limit参数用于设置一次请求多少条数据,还有其他可用的参数可以设定。

如果你不想使用Marvel API,我也为你提供了一个JSON数据,使用以下代码替换Marvel API地址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'use strict';

var url = `https://gist.githubusercontent.com/ChrisChinchilla/29486e8ce367f426dfe6b15dbcc3fa54/raw/3ea92af51ce3749bb5983c1cb0359883592daef6/Marvel%2520Electron%2520Data`;

接下来创建创建生成插入 character_listdiv的每一个角色的HTML字符串方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var characterHTML = (character)=> `
  <div class="character">
    <h2>${character.name}</h2>
    <img src="${character.thumbnail.path}.${character.thumbnail.extension}" />
  </div>`;

然后调用API,得到的JSON格式的角色信息在 resp.data.results

为每一个角色生成HTML元素并且插入到 character_list,通过Marvel API得到的角色图片被分为文件名(file name)和扩展名(extension),如果没有可用的角色图片,则会返回一张显示为 ‘no image available’的图片,我们可以很轻易的处理这种情况,但不会在这个例子中做处理。

当整个过程完成之后,调用系统API显示一个通知,并捕获可能出现的异常情况:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fetch(url)
    .then(resp => resp.json())
    .then(json => json.data.results)
    .then(characters => {
        var html = characters.map(characterHTML).join('');
        var characterList = document.getElementById("character_list");
        characterList.innerHTML = html;

        new Notification(document.title, {
            body: 'Super Heroes Loaded!'
        });
    })
    .catch((error)=> {
        console.error(error);
    });

在命令行通过在项目根目录执行以下命令运行项目:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`electron .`

打包应用程序

打包代码成为一个 原生应用非常简单只需要一个应用图标,它的外观和文件类型取决于你的应用运行的操作系统,我在这里使用的图标来自Marvel官方的安卓APP。

注意: 这里我们使用受版权保护的图标用于教学目的,请不要使用他们用于自己的项目。

然后我使用了iconverticons.com/online/ 把PNG格式图片转换为MAC所需要的应用程序图标,当然还有其他可用的转换工具。

最简单的打包方法是使用 electron-packager,这是一个npm模块(注意:需要单独安装),他可以生成一个体积比较大的二进制文件,当然对于桌面应用来讲这应该不算是什么大问题,如果你比较在意体积大小,这里有另外一个选择。

如果你在一个非Windows的操作系统上打包Windows应用,那么你需要安装Wine。

在命令行使用如下命令打包你的应用(替换为你的项目相关的参数):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`electron-packager /Users/chrisward/Workspace/sp_electron MarvelBrowse --platform=darwin --arch=x64 --version=0.36.10 --out=/Users/chrisward/Workspace --overwrite --icon=/Users/chrisward/Workspace/sp_electron/marvel-app.icns`

这些参数将要被设置:

  • 项目路径。
  • 生成的应用名称。
  • 所运行的操作系统: win32 用于 Windows, linux, darwin 用于 vanilla Mac OS X , mas 用于 Mac App store 发布应用. 设置为 all会生成所有操作系统的二进制文件。
  • The architecture: ia32x64 分别用于 32位操作系统和64位操作系统,当然也可以设置为 all
  • Electron的版本。
  • 生成二进制文件的路径。
  • 所使用的应用程序图标。

主意: 参数可以为多个并使用逗号分开值,如果你想生成所有平台的二进制文件可以替换相关参数为 --all

还在对Electron保持怀疑?我写这篇文章使用 Atom,我与编辑联系使用Slack ,我用来测试程序使用的Docker容器通过 Kitematic创建,他们都是使用Electron生成的应用程序。


往期精选文章

使用虚拟dom和JavaScript构建完全响应式的UI框架

扩展 Vue 组件

使用Three.js制作酷炫无比的无穷隧道特效

一个治愈JavaScript疲劳的学习计划

全栈工程师技能大全

WEB前端性能优化常见方法

一小时内搭建一个全栈Web应用框架

干货:CSS 专业技巧

四步实现React页面过渡动画效果

让你分分钟理解 JavaScript 闭包



小手一抖,资料全有。长按二维码关注京程一灯,阅读更多技术文章和业界动态。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 京程一灯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
electron 构建跨平台桌面应用
昨日(2016.09.13)本文发表后,获得了一定的阅读和转发量,但经部分网友反馈和仔细审核后发现,在与 NW.js 对比的环节,言辞欠妥,且数据的真实性有待考究,特此将争议部分删除,同时借此诚挚地向 NW.js 的作者以及各位读者反馈表示感谢,期待更多深入的交流和分享,修订后的版本如下: Stack Overflow 联合创始人 Jeff Wood 曾说过,任何一个能用 JavaScript 编写的应用系统,最终都必将使用 JavaScript 实现。 简介 Electron 是一款可以通过 Web前端技
QQ音乐技术团队
2018/01/31
3.7K0
electron 构建跨平台桌面应用
Electron快速上手并将网站直接生成桌面应用
Atom、Postman、Notion、Vscode等都是用Electron开发的
游魂
2021/11/24
2.7K1
Electron快速上手并将网站直接生成桌面应用
用JS开发跨平台桌面应用,从原理到实践
使用Electron开发客户端程序已经有一段时间了,整体感觉还是非常不错的,其中也遇到了一些坑点,本文是从【运行原理】到【实际应用】对Electron进行一次系统性的总结。【多图,长文预警~】
ConardLi
2019/06/15
7.2K0
使用Electron开发桌面应用
摘要总结。该文介绍了如何使用Electron框架开发桌面应用。Electron是一个用于构建跨平台桌面应用的框架。通过使用Electron,开发者可以使用JavaScript、HTML和CSS来构建桌面应用。Electron应用包括三个主要组件:package.json文件、index.html文件以及main.js或renderer.js文件。使用Electron开发应用时,可以通过Electron的API与主进程和渲染进程进行交互。Electron应用可以运行在Mac、Windows和Linux上。
用户1141560
2017/12/26
2.6K0
使用Electron开发桌面应用
AntDesignPro使用electron构建桌面应用
当项目打包成应用后使用的是 file:协议 ant pro 的请求无法发出 需要使用完整的请求地址 目前方法为配置前缀
憧憬博客
2020/08/12
2.3K0
Electron 介绍
​ Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium (opens new window) 和 Node.js (opens new window) 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。
郭顺发
2021/12/17
2.4K0
Electron 介绍
Electron框架 介绍
Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。
郭顺发
2023/07/17
6200
使用JS开发桌面应用
Javascript在web开发中已经稳稳的占据了重要位置,现在已经开始渗透到桌面开发了 Electron 便是用来创建桌面应用的框架 使用 JavaScript + HTML + CSS 就可以开发跨平台的桌面应用 支持 Windows Linux Mac,在这3个系统中,Electron可以轻松的编译和运行 Electron 是开源的,由 GitHub 亲自维护,还有活跃的贡献者社区 Electron 源于 GitHub 开发的一款文本编辑器 Atom,刚开始,Electron 是为 Atom 而创建,
dys
2018/04/03
2.9K0
使用JS开发桌面应用
Electron利用web技术开发桌面应用
简单来说,Electron就是可以让你用Javascript、HTML、CSS来编写运行于Windows、macOS、Linux系统之上的桌面应用的库。本文的目的是通过使用Electron开发一个完整但简单的小应用:记事本,来体验一下这个神器的开发过程。本文犹如Hello World一样的存在,是个入门级笔记,但如果你之前从未接触过Electron,而又对它有兴趣,某想信这会是一篇值得一看的入门教程。   PS:这篇文章是基于Windows的开发过程,未对macOS、Linux作测试。
javascript.shop
2019/09/04
2.3K0
Electron利用web技术开发桌面应用
Electron桌面应用打包流程(记录一下)
 参考链接:http://www.runoob.com/nodejs/nodejs-install-setup.html
力力
2019/08/26
6K0
Electron桌面应用打包流程(记录一下)
electron入门实战
当我们明白了以上几个问题之后,那就大概率算是基本掌握了这个技术,后面再要深入就要经过大量的项目实践和源码原理的研究了。
用户6297767
2023/11/21
4750
electron入门实战
用 Electron 将 UniApp 封装为 EXE 指南
最近想要制作一个 Windows 工具箱,所以需要多集合一些功能。之前用 uniapp 制作了一些功能,为了省事,所以想要把部分 uniapp 封装成 exe 来丰富功能。
繁依Fanyi
2025/02/22
1730
用 Electron 将 UniApp 封装为 EXE 指南
Electron入门教程1 —— 编写第一个桌面应用程序
关于Electron这个框架我就不多介绍,它说白了就是Node和Chromium内核的一种封装。用它开发出来的桌面应用程序其实就是套壳浏览器的应用,这就是为什么它可以用web前端技术来开发,并且可以跨平台的原因了。
害恶细君
2022/11/22
4.9K0
Electron入门教程1 —— 编写第一个桌面应用程序
Electron 使用 Webpack2 预编译 Electron 和 Browser targets
前一篇文章说了说怎样使用 Webpack2 预编译 Electron 应用,但是有时候我们希望使用 Webpack2 的热部署功能来提高我们的开发效率,使我们在代码修改后能自动立即看到修改后的结果。那么今天就看看怎样来实现这个功能。 安装依赖库 $ npm install --save-dev electron $ npm install --save-dev electron-packager $ npm install --save-dev webpack $ npm install --save-
kongxx
2018/05/14
1.1K0
前端构造桌面级应用(QQ音乐)
https://blog.csdn.net/weichuang_1/article/details/48849335
念念不忘
2019/03/29
2.8K0
前端构造桌面级应用(QQ音乐)
使用React、Electron、Dva、Webpack、Node.js、Websocket快速构建跨平台应用
目前Electron在github上面的star量已经快要跟React-native一样多了 这里吐槽下,webpack感觉每周都在偷偷更新,很糟心啊,还有Angular更新到了8,Vue马上又要出正
Peter谭金杰
2019/08/02
3.2K0
使用React、Electron、Dva、Webpack、Node.js、Websocket快速构建跨平台应用
IM跨平台技术学习(十一):环信基于Electron打包Web IM桌面端的技术实践
早就听说利用Electron可以非常便捷的将网页端快速打包成桌面应用,并且利用 Electron 提供的 API 调用可以使用原生桌面 API 一些高级功能。于是这次借着论证 Web IM端 SDK 是否可以在 Electron 生成的桌面端正常稳定使用,我决定把官方新推出的 webim-vue3-demo,打包到桌面端,并记录了这次验证的过程以及所遇到的问题和解决方法。
JackJiang
2024/06/13
2060
IM跨平台技术学习(十一):环信基于Electron打包Web IM桌面端的技术实践
万物皆可快速上手之Electron(第一弹)
React作为日常使用比较频繁的框架,这里就不详细说明了,这里主要是想通过几篇文章让大家快速上手Electron以及与React完美融合。
前端森林
2020/11/19
1.5K0
万物皆可快速上手之Electron(第一弹)
第二章 你第首个Electron应用 | Electron in Action(中译)
本章主要内容 构建并启动Electron应用 生成package.json,配置成Electron应用 在你的项目中包含预先构建Electron版本 配置package.jso
sanshengshui
2019/06/26
4.8K0
第二章 你第首个Electron应用 | Electron in Action(中译)
使用 Electron 和 React 构建桌面应用
Electron 是一个使用 HTML、CSS、JavaScript 构建跨平台桌面应用的框架。
Kindem
2022/08/12
3.9K0
使用 Electron 和 React 构建桌面应用
推荐阅读
相关推荐
electron 构建跨平台桌面应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验