使用JavaScript开发跨平台的桌面应用详解


Posted in Javascript onJuly 27, 2017

任何可以使用JavaScript来编写的应用,最终会由JavaScript编写。--Atwood定律

Atwood's Law是Jeff Atwood在2007年提出的:“any application that can be written in JavaScript, will eventually be written in JavaScript.”。据说,这只是当时开的一个玩笑。不过,这个玩笑似乎渐渐变成了现实。从各种华丽的网页框架,到功能强大的库,到了现在的机器学习,服务器开发,都有JavaScript的身影。从JavaScript也衍生出了一些语言,例如TypeScript。而使用JavaScript制作游戏也变得方便起来,可以使用CocosCreator。Html5的横空出世,也将之前JavaScript在网页的辅助地位提升到了主力地位,nodejs的出现更是让其实现了所谓的“全栈”开发,现在JavaScript甚至可以做手机应用。但是,在移动端、浏览器、服务器端有需求,在桌面应用上也会有需求。能不能使用JavaScript来开发可以跨平台的应用程序呢?答案是:可以。使用Electron即可方便的使用JavaScript进行桌面应用开发。可以看到,很多大名鼎鼎的程序都是由它直接或间接开发而成,例如Atom,VSCode等。

需要注意的是,目前使用Electron开发桌面应用程序有一些限制条件。首先,我们无法调用复杂的系统API(或者说不能直接做到),这就导致我们无法开发更加复杂的企业级应用。其次,它的性能目前仍然不能与原生应用相提并论。我们可以认为,Electron就是一个套着浏览器外壳的包装盒,这个包装盒给我们读写文件的能力,我们开发好web应用程序,调试完成后使用它来进行封装,给我们的web应用程序加一个浏览器内核。这样,我们的js代码就可以脱离传统浏览器模式,独立运行了。然而它和传统的浏览器模式道理是一样的,所以有极高性能需求时,还是需要使用C++、Java等开发。但大多数的应用程序根本不需要那么高的性能要求,所以使用Electron开发是没有问题的。接下来,我们尝试着从零开始,一步一步的使用Electron来开发Windows桌面应用,当然Mac和Linux也适用此方法。

首先,我们进入Electron的官网:https://electron.atom.io/。进入后,发现全英文,不要紧,实际上大多数都可以不看。我们直接来到首页的这里:

使用JavaScript开发跨平台的桌面应用详解

如图所示,官方给出的安装方法是使用git和npm,但我们可以不使用git。然而,npm是必要的。npm是nodejs的包管理工具,新版本的nodejs已经集成了npm,安装nodejs后直接附带npm。然而,一些旧版本的nodejs,或者从一些非官方处下载的不可靠的nodejs,可能不带npm,所以我们在使用它之前必须先安装nodejs和npm。网上有很多教程,这里不再演示。需要注意的是,第三个命令npm install && npm start中,我们可以只输入npm install,因为后面附带的指令很可能导致控制台“死机”的情况,一直卡住且无法成功安装Electron。所以,我们只要进入我们指定的目录,然后执行以下命令即可(这些命令各个系统通用):

使用JavaScript开发跨平台的桌面应用详解

使用JavaScript开发跨平台的桌面应用详解

如此一来,我们就安装好了Electron。文件夹中:

使用JavaScript开发跨平台的桌面应用详解

打开来看,文件的目录结构是这样的:

使用JavaScript开发跨平台的桌面应用详解

目录看似复杂,其实,我们甚至可以不管这些文件!main.js可以相当于我们的配置文件,里面有一些配置信息,默认情况下,我们的应用程序会直接打开这个目录下的index.html。我们可以通过修改main.js中的参数来更改入口文件。当然,package.json也有用,之后都会讲到。

首先,我们可以使用electron.exe直接运行应用。在我的目录中,electron.exe在E:\electron-quick-start\node_modules\electron\dist目录下。我们可以使用electron.exe <rootpath> 这种命令格式直接运行我们的应用,rootpath代表你要运行的项目目录。例如,我之前用three.js编写的应用,目录是:E:\app。

使用JavaScript开发跨平台的桌面应用详解

我们在控制台中输入指令:使用JavaScript开发跨平台的桌面应用详解

效果:

使用JavaScript开发跨平台的桌面应用详解

确实是以桌面应用程序的形式运行了。但是,我们希望我们的应用程序直接打包成.exe,.app的形式,而不是让我们的用户手动输入命令启动应用程序。而看看官方文档,你就会发现,官方给出的打包方法还是有一些坑的,如果处理不好,就要中招。所以,我们使用更加方便的electron-packager。github链接在此:https://github.com/electron-userland/electron-packager。首先,我们还是按教程输入指令来安装它。同样,这个指令在Linux,Mac,Windows上通用。

使用JavaScript开发跨平台的桌面应用详解

安装方法和Electron一样,从git上下载下来,进行安装。需要注意的是,上图的两个指令我们执行其中一个就可以了。推荐执行第二个,因为第二个是全局安装,安装之后我们就可以在控制台直接执行electron-packager命令,大大方便了我们的效率。

安装好后,我们开始打包。首先,把我们的项目目录拷贝到我们之前安装的electron目录下:

使用JavaScript开发跨平台的桌面应用详解

由于我们的应用程序入口文件是app下的CG1.html,所以我们还需要打开main.js配置一下入口文件:

使用JavaScript开发跨平台的桌面应用详解

然后,打开package.json文件,配置一下参数。

使用JavaScript开发跨平台的桌面应用详解

这里只配置了name参数,因为name参数和我们打包之后生成的应用程序名称有关。接下来,通过控制台进入我们的electron目录(就是有main.js有package.json的那个目录),

在控制台执行如下命令:

使用JavaScript开发跨平台的桌面应用详解

不要漏看了还有个".",这个指当前目录的意思。其实,如果全局安装了electron-packager,那我们呀可以把.换成任意的路径。由于这个命令可以自动的检测当前计算机的操作系统,还能检测出是32位还是64位,所以我们大可省略一些参数。但如果要生成可定制平台的软件,需要带上一些参数,详细的在其项目的github中都已给出。相信大家如果有这个需求,那搞定这些参数应该不在话下。静待一会儿,打包完毕。我们可以在文件夹下看到多了一个名为CG1-win32-x64的文件夹。打开之后,点击CG1.exe,即可打开应用程序,此程序已经可以作为发布版本提供给用户!

使用JavaScript开发跨平台的桌面应用详解

最后,推荐一下Electron的中文教程:https://www.w3cschool.cn/electronmanual/p9al1qkx.html

以上这篇使用JavaScript开发跨平台的桌面应用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript中的prototype属性使用说明(函数功能扩展)
Aug 16 Javascript
JavaScript 程序编码规范
Nov 23 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
Dec 10 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
Feb 28 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
Dec 18 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
Jan 26 Javascript
简单介绍react redux的中间件的使用
Apr 06 Javascript
vue router 配置路由的方法
Jul 26 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
May 16 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
Nov 09 Javascript
JavaScript中的this原理及6种常见使用场景详解
Feb 14 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
Dec 10 Javascript
详解VueJS 数据驱动和依赖追踪分析
Jul 26 #Javascript
前端主流框架vue学习笔记第二篇
Jul 26 #Javascript
浅谈vue.js中v-for循环渲染
Jul 26 #Javascript
前端主流框架vue学习笔记第一篇
Jul 26 #Javascript
关于vue.js组件数据流的问题
Jul 26 #Javascript
Vue.js弹出模态框组件开发的示例代码
Jul 26 #Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
Jul 26 #Javascript
You might like
PHP学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
JQuery实现的在新窗口打开链接的方法小结
2010/04/22 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
Python 字符串操作方法大全
2014/03/11 Python
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
浅谈Python实现2种文件复制的方法
2018/01/19 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
露营世界:Camping World
2017/02/02 全球购物
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
网络维护管理员的自我评价分享
2013/11/11 职场文书
英文简历中的自荐信范文
2013/12/14 职场文书
简单租房协议书
2014/04/09 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
教师党员先进性教育自我剖析材料思想汇报
2014/09/24 职场文书
2015年置业顾问工作总结
2015/04/07 职场文书
java开发双人五子棋游戏
2022/05/06 Java/Android