之前一直用.net开发桌面应用,最近由于公司需要转为nodejs,但也是一直用nodejs开发后台应用,网站,接口等。近期,需要开发一个客户端,想着既然nodejs号称全栈,就试一下开发桌面应用到底行不行。

是骡子是马总要拉出来溜溜才知道,是吧。

查了一下,目前用Nodejs开发桌面应用,主要有两种方案

  1.Electron

  Electron是一款利用Web技术开发跨平台桌面应用的框架。项目地址是:https://github.com/atom/electron

  2.NW.js

  NW.js是Intel的工程师写的一个基于node.js和chromium的应用程序运行环境。项目地址是:https://github.com/rogerwang/node-webkit

  一、NW.js的下载

  官网地址是:http://nwjs.io/

  进去之后,点击下载SDK的版本,并解压至本地目录即可。

  

这里遇到一个郁闷的事,从官网上下载的0.30版本的zip包,怎么都打不开,提示压缩包有错误。

使用7zip也不行

还是从官网下载的,真是服了。下载了10几次都不行。。

只能从其他网站下载了一个0.23的包使用。

0.23版本的sdk下载

https://download.csdn.net/download/zhupengfei/10366176

0.30版本的运行时下载

https://download.csdn.net/download/zhupengfei/10366181

  二、应用编写

  1.在nw.exe目录中创建一个helloworld的文件夹。

  新建index.html

  

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello zhupengfei!</title>
<script src="helloworld.js"></script>
</head>
<body> </body>
</html>

  

按新建helloworld.js
document.write('Hello, World!');

  新建package.json

{
//应用的入口页面(也可以设置成js文件)
"main": "index.html",
//应用的名称
"name": "HelloWorld"
}

  2. 运行helloworld。

  a) 在nw.exe所在目录按下shift+鼠标右键,选择"在此处打开命令窗口"。然后输入nw helloworld即可看到运行效果。注意建议使用cmd,不要使用powershell。我使用powershell必须使用./nw 才可以。

  b) 可以直接将helloworld目录拖拽到nw.exe上同样也可以运行。

  三、应用打包

  一般windows的桌面应用都是exe可执行文件,是不依赖于其他文件和环境的。而我们创建的helloworld应用是依赖于nw.exe和相关文件的,那么如何将应用打包成一个可执行文件呢?

  经过google,果然是有解决方案的,那就是Enigma Virtual Box

  1. 下载Enigma Virtual Box

  地址是:http://enigmaprotector.com/en/downloads.html

  选择最后一个下载就可以了,然后安装。

  2. 将应用打包成helloworld.nw文件。

  进入到helloworld目录中,全选三个文件打包成zip,然后改名成helloworld.nw。

  (有一个坑,这里从网上看了说用WINRAR压缩成ZIP不行,必须用7-zip,所以这里直接通过。

  

  3. 合并helloworld.nw和nw.exe

  将helloworld.nw文件移动到和nw.exe同级目录下,然后执行命令,注意nw.exe必须在前面,不要弄反了,hello.exe运行会出错

copy /b nw.exe+helloworld.nw hello.exe

  发现多了一个hello.exe文件,双击发现是可以运行的。不过这还不是最终的结果,因为将hello.exe移动到其他文件夹之后,就不能正常执行了。

  4. 使用Enigma Virtual Box打包成exe,安装后可以语言中选择中文显示。

  

  Input File Name选择刚才生成的hello,Output File Name就是输出文件。

  除了刚才合并的hello.exe文件,其他所有文件都需要添加进来,有一个快速的方法就是直接将所需的文件和文件夹,直接拖进来。

确定

  然后点击右下角的"执行封包"按钮,

  

打包以后文件太大了,144M啊。我晕,这才只是个demo啊。

  看到上图结果,就说明执行成功了。

  找到打包后的文件,然后执行。

  四、加密

加密必须使用SDK包,开始下载的是运行时包,不知道,后来下载了SDK包,才发现里面有nwjc.

增加加密字符串,又方便确认是否加密成功。

执行以下命令,将JS文件加密为bin文件

$ cd helloworld

$ ../nwjc.exe helloworld.js helloworld.bin

多了两个文件。

内容确实输出了。

然后按照上面相同的步骤,压缩zip修改为nw,然后合并,处理等等。

个人总结:

个人感觉两者都差不多吧,昨天用Electron做了一个demo,效果出来了。还不错。今天用Nwjs试一下。

为什么还要用Nwjs呢,原因是Electron目前无法支持代码保护,可以asar压缩,但是可以解压。做桌面应用多数还是商业项目,所以代码保护我认为是必须的。

昨天晚上看Electron的github里吵了半天,最后的结论是eclectron没有计划在项目中增加代码保护功能,原因是他们认为多数人用不到。

所以我觉得做桌面应用还是选用传统的.net java C++等吧,像nodejs python说是全栈,其实最多还是能做桌面应用,真是要商用,还是差一些,最好慎重选择。

2018-4-24看到朋友的热情回复,这里补充一下

使用nodejs开发客户端,还是用c#,解决方案本身没有对与错,要看具体的需求,适合需求的方案都是对的,好的,同时这个对和好也不是长久的,随着技术的进度,将来可能就不合适了。

说两个使用场景

1、如果我们要开发一个云网盘的客户端。那用Nodejs开发应该是合适的,一次开发,可以适合于不同的客户端,windows,linux都适用。

或者采用微信的客户端的方式,用cef浏览器客户端开发,这样,网页版,PC版都统一了。

2、如果我们要开发一个商业的收银系统,支持读会员卡,打印小票,可能还要读身份证,指纹仪设备等,c#有多年的经验,一些设备厂商也都提供的有相应语言的demo。如果用nodejs开发,可能要费点功夫了。

而且做商业软件,系统得稳定吧,对我而言,我肯定会选择c#开发。

或许几年后,nodejs桌面开发慢慢成熟,对接外设已经有大量的产品,那时候说不定我会选择nodejs呢。

------------------------------------------------------------

  遇到问题可以微信联系我哦

或者支付宝联系我

使用Nwjs开发桌面应用体验的更多相关文章

  1. Nwjs开发桌面应用

    使用Nwjs开发桌面应用体验 https://www.cnblogs.com/zhupengfei/p/8906131.html 之前一直用.net开发桌面应用,最近由于公司需要转为nodejs,但也 ...

  2. 使用nwjs开发桌面应用之Hello,World!

    今天发现原来JavaScript也可以用来开发桌面应用程序,顿时有一种很牛逼的感觉,于是马上就开始了Hello,World!,感受一下JavaScript的强大. 可以用来开发桌面应用的js框架有三种 ...

  3. heX——基于 HTML5 和 Node.JS 开发桌面应用

    heX 是网易有道团队的一个开源项目,允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.heX 是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发中繁 ...

  4. heX:用HTML5和Node.JS开发桌面应用

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. (转)heX——基于 HTML5 和 Node.JS 开发桌面应用

    本文转载自:http://techblog.youdao.com/?p=685 简介:heX,一个允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.是你开发 ...

  6. 使用JavaFX开发桌面程序(一)

    使用JavaFX开发桌面程序 注:我也是JAVA FX的初学者之一,自己在学习的时候踩了许多的坑,中文英文的资料查了不少,但是觉得FX技术和其他热门技术相比,教程还是太少了.这里就尽量做一点微小的贡献 ...

  7. aardio 开发桌面应用,这几点必须要掌握!

    1. 前言 大家好,我是安果! 上一篇文章写到可以通过 aardio 结合 Python 开发桌面应用,有些小伙伴后台给我留言,说 Aardio 资料太少,希望我能补充一些实用的功能 实用 | 利用 ...

  8. arcpy+PyQt+py2exe快速开发桌面端ArcGIS应用程序

    前段时间有一个项目,大体是要做一个GIS数据处理工具. 一般的方法是基于ArcObjects来进行开发,因为我对ArcObjects不太熟悉,所以就思考有没有其他简单快速的方法来做. 在查看ArcGI ...

  9. electron之Windows下使用 html js css 开发桌面应用程序

    1.atom/electron github: https://github.com/atom/electron 中文文档: https://github.com/atom/electron/tree ...

随机推荐

  1. 关于ORM,以及Python中SQLAlchemy的scoped_session

    orm(object relational mapping):对象关系映射. python面向对象,而数据库是关系型. orm是将数据库关系映射为Python中的对象,不用直接写SQL. 缺点是性能略 ...

  2. Python-turtle库知识小结(python绘图工具)

    turtle:海龟(海龟库) Turtle库是Python语言中一个很流行的绘制图像的函数库 使用之前需要导入库:import turtle • turtle.setup(width,height,s ...

  3. Linux下ftp和ssh详解

    学习了几天Linux下ftp和ssh的搭建和使用,故记录一下.学习ftp和ssh的主要目的是为了连接远程主机,并且进行文件传输.废话不多说,直接开讲! ftp服务器 1. 环境搭建 本人的系统是Arc ...

  4. 关于安装win7系统时出现0x0000007b电脑蓝屏代码的问题

    问题解析: 0X0000007B 这个错误网上都说是sata硬盘的什么引导模式的原因引起. 在网上查找了很久,大概引起错误的原因就是:sata和ide两种模式不同,前者可以装win7系统,后者是xp系 ...

  5. zookeeper提示Unable to read additional data from server sessionid 0x

    配置zookeeper集群,一开始配置了两台机器server.1和server.2. 配置参数,在zoo.cfg中指定了整个zookeeper集群的server编号.地址和端口: server.1=1 ...

  6. axios封装

    前言 作为出入vue的小萌新,我在写请求的时候,也是毫不犹豫写了ajax,结果肯定是不行的... Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2. ...

  7. 用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载

    用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载,将一个完整的项目进行展示,主要有以下几个部分: 1.servlet部分   Export 2.工具类:TxtFileU ...

  8. linux的链接工具secure设置字体大小和颜色

  9. 1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

    解决问题:windows下:修改my.ini 在[mysqld]内加入secure_file_priv = linux下:修改my.cnf 在[mysqld]内加入secure_file_priv = ...

  10. Python爬虫之urllib模块1

    Python爬虫之urllib模块1 本文来自网友投稿.作者PG,一个待毕业待就业二流大学生.玄魂工作室未对该文章内容做任何改变. 因为本人一直对推理悬疑比较感兴趣,所以这次爬取的网站也是平时看一些悬 ...