用node-webkit(NW.js)创建桌面程序

以往写windows桌面程序需要用MFC、C#之类的技术,那么如果你只会web开发技术呢?或者说你有一个网站,但是你想把你的网站打包成一个桌面应用程序,该如何做呢?

答案就是用node-webkit这个开源框架,他封装了webkit内核和node.js,让你可以用web技术来开发windows/linux/OSX程序等。指的一提的是目前node-webkit已经改名为NW.js,下面是在github上的此框架站点:

https://github.com/nwjs/nw.js

 

本文讲述了如何使用该工具打包成windows桌面程序的一个简单例子,同时给出了如何降低打包出来的程序的size的一个方式(用node-webkit打包出来的桌面程序size通常会比较大),更多的技术细节请参考上述站点。

 

需求


首先我们的需求很简单,做一个windows桌面程序(exe),里面载入百度的首页,用户可以就像用浏览器一样使用。以此类推,由于是封装了webkit,当然你便可以使用web技术开发一个windows桌面软件。

 

下载和安装node-webkit


进入官网后(http://nwjs.io/),点击下载,我这里使用的是win8.1的64位计算机,即下载win64版本

 

下载出来后解压,文件夹中即为Node-webkit的主文件夹:

 

这里的nw.exe即该框架原先提供的一个已经封装了webkit等的exe,这个是你构建自己的exe的基础,你自己创建的web程序其实都是需要这个东西来运行,因为它提供了runtime环境。

 

修改icon


这里有一点需要提的是,默认情况下你创建出来的你的应用程序(exe)会和nw.exe的图标一样,当然这个不是你所想要的。所以你可以通过resource hacker这个工具来修改nw.exe的图标成你所想要的,比如可以参考:

http://keenwon.com/1311.html

 

撰写WEB应用


到这里我们就可以开始撰写web应用了,因为本例子很简单就是打开一个网址,所以应用的目录大致如下:

我们主要来看package.json这个配置文件,这个是每个用node-webkit进行打包时候必须要的一个配置文件,内容大致如下:

{// "main": "index.html","main":"http://www.baidu.com/","name": "baidu","window": {"title": "baidu","icon": "assest/img/logo.png","toolbar": true,"width": 1280,"height": 800,"min_width": 400,"min_height": 200},"webkit": {"plugin": true,"java": false,"page-cache": false}
}

由于我们仅仅是打开一个网页,所以main这个参数里面的值并不是index.html,而直接写上一个网址就好

window.icon这个参数可以配置这个exe在windows的底部任务栏上的图标

toolbar最好设置为true,这样子你的应用程序上面会有类似于浏览器的工具栏,如果你的程序类似于一个音乐播放器之类的东西,那么你可能需要设置为false

关键package.json的语法请参考:

https://github.com/nwjs/nw.js/wiki/Manifest-format#webkit-subfields

 

打包


下面我们可以开始打包了。

首先将你的所有的应用程序全选,添加压缩文件后并改名为app.nw(名字无所谓,但是扩展名一定要修改为nw),要确保package.json在根目录。即你打开压缩后的zip应该是这样的

 

随后,将你的app.nw拷贝到node-webkit的和nw.exe同一目录,进入windows cmd后运行这个命令:

copy /b nw.exe+app.nw app.exe

 

这个时候你发现生成了app.exe,这个时候即成功将你的web应用打包成了一位windows桌面程序,直接双击它即可运行:

 

是不是看起来像是一个浏览器?其实他真的就是一个浏览器,因为他封装了webkit!

 

发布


这个时候你希望把exe发布出去,但是要注意的是你不能独立的运行这个app.exe,因为它需要依赖一些dll,官网上推荐用Enigma Virtual Box这个软件来将app.exe和依赖的dll打包成一个exe后发布,但是这里有个严重问题,那就是这个最后生成的yourapp.exe的size太大,至少70MB以上!

原因很简单,这个是因为app.exe本身就很大,已经有几十mb,而他其实也是基于我们刚解压出来node-webkit后那个nw.exe而生成的,而那个nw.exe本身已经50+mb了,所以我们的app.exe能小的起来吗?

 

这里推荐另一个打包方式,就是用Inno Setup来打包成安装程序,即将你的一开始的web应用源文件和node-webkit的nw.exe和一些以来dll直接压缩成一个安装文件,我们并不需要上述中间那先打包成app.exe的步骤。用户在使用你的exe后会出现setup wizard把程序安装到Program Files目录中,其实等于解压缩了,将nw.exe和dll还有你的web应用释放出来,这个时候所生成的安装文件其实size会小很多。

 

我们通过这个站点来下载Inno Setup工具

http://www.jrsoftware.org/isdl.php

 

下载安装运行后点击File->New即进入傻瓜式的创建步骤

 

下一步,填写你的发布应用的公司信息

 

继续下一步直到走到Application Files,这一步是添加你的应用程序的打包文件:

 

上面的“Application main executable file”指向node-webkit的nw.exe,下面的Other application files,通过add file(s)来添加nw.pak和dll依赖文件,通过add folder来添加你的web应用文件

继续点击下一步,后面还可以选择用户安装的时候可以选择的语言:(默认是没有中文的,中文包请在这里下载http://www.jrsoftware.org/files/istrans/)

 

下一步,可以还可以选择分发的exe的icon

 

继续后面的操作的,即可生成一个只有20多mb的setup.exe安装文件了,以供分发

 

转载于:https://www.cnblogs.com/soaringEveryday/p/4950088.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kindeditor用法简单介绍(转)

1,首先去官网下载http://www.kindsoft.net/ 2,解压之后如图所示: 由于本人做的是用的是JSP,所以ASP,PHP什么的就用不上了,直接把那些去掉然后将整个文件夹扔进Myeclipse,如图: 里面有个报错&am…

SOLIDWORKS——参数化建模

https://www.sohu.com/a/259742200_100042821 知识点:投影曲线、曲面填充、扫描、外观设置 建模步骤 1.先在工具——方程式里输入一个直径的变量A120 。 2.在前视基准面上草绘圆,画一条直径。直径等于变量A。 3.旋转,选择粉色区域。 4.上视…

Androd安全——反编译技术完全解析

0.前言单纯从技术角度上来讲,掌握反编译功能确实是一项非常有用的技能。另外既然别人可以反编译程序,我们当然有理由应该对程序进行一定的保护,因此代码混淆也是我们必须要掌握的一项技术。看完此篇如果对代码混淆也感兴趣&#x…

python——shape 与reshape

转载自:https://blog.csdn.net/u010916338/article/details/84066369 shape()和reshape()都是数组array中的方法 numpy中reshape函数的三种常见相关用法 numpy.arange(n).reshape(a, b) 依次生成n个自然数,并且以a行b列的数组形式显示np.arange(16).reshape(2,…

误删了microsoft visual c++后如何正常运行matlab

误删了microsoft visual c后如何正常运行matlab 本人在卸载visual studio2013的时候,因为这个软件卸载的过程中出现一些问题,误将visual c当成VS的组件一同删除了。但是在打开matlab 时发现出错,matlab打开后会出现下面的界面。 出现这个问题…

iScreenLocker 3.1.8 安卓锁屏通知--苹果一样的体验

*软件介绍:苹果锁屏通知(iScreenLocker)是一款android上ios风格的锁屏软件。它颠覆安智通知设计,将原来状态栏的通知搬到锁屏界面上来,能够在桌面轻松收发短信,微博,微信等消息。它独有的消息唤醒功能。能使手机从待机界面唤醒而消耗非常少的电量。手指轻…

JSP慕课网阶段用户登录小例子(不用数据库)

getAttribute和setAttribute一起使用,而getParameter用于取得如request传来的参数。 Web是请求/响应架构的使用,而request和response就是在服务器端生成的相应的两个对象,request能够获取客户端传递的参数及相关的一些信息,而resp…

机器学习python——python基础

目录 1、常用库 2、shape与reshape,dtype 3、range、arange、linspace、logspace 4、数组的计算、切片 5、绘图基本设置 6.三维绘图 1、常用库 numpy、scipy、matplotlib、math 2、shape与reshape,dtype https://blog.csdn.net/qq_45769063/arti…

win10环境下如何给visual studio 2013永久配置opencv3.1.0环境

win10环境下如何给visual studio 2013永久配置opencv3.1.0环境 本人在给visual studio 2013配置opencv 环境下遇到过一些问题,比如配置不成功或者不能永久配置opencv环境。先将自己的配置经验分享于此,希望同道中的好友可以用上。 首先自行下载Visual s…

属性名、变量名与 内部关键字 重名 加

procedure TForm4.btn3Click(Sender: TObject); varMyQj: TQJson;MyPrinter: TPrinter; beginMyQj : TQJson.Create;tryMyPrinter.name : A号打印机;MyPrinter.status : enabled;MyPrinter.&type : yes;MyQj.FromRecord<TPrinter>(MyPrinter);Memo1.Lines.Add(MyQj.A…

机器学习——支持向量机SVM之线性模型

目录 一、没有免费的午餐定理 二、支持向量机SVM&#xff08;support vector machine&#xff09; 1、线性模型和非线性模型 2、如何在线性模型中画出一条直线&#xff08;优化过程——vplink&#xff09; 1&#xff09;多少条&#xff1f; 2&#xff09;如何画出最好的直…

Oauth2.0和1.0区别

1.0的授权分3步, A)客户端到授权服务器请求一个授权令牌(request token&secret) B)引导用户到授权服务器请求授权 C)用访问令牌到授权服务器换取访问令牌(access token&secret) D)用访问令牌去访问得到授权的资源 2.0的用户授权过程有2步&#xff0c; A)引导用户到授权…

spring@PropertySource用法

v测试例子 package com.hjzgg.auth.config;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annot…

机器学习——支持向量机SVM之非线性模型(低维到高维映射)

目录 一、非线性模型的最优化问题 1、非线性模型最优化模型 2、两个概念 1&#xff09;正则项&#xff08;regularization term&#xff09; 2&#xff09;调参参数 2、高维映射 1&#xff09;定义及作用 2&#xff09;高维映射后的最优化模型 3&#xff09;异或问题&…

html表单中get与post之间的区别

当用户在 HTML 表单 (HTML Form) 中输入信息并提交之后&#xff0c;有两种方法将信息从浏览器传送到 Web 服务器 (Web Server)。 一种方法是通过 URL&#xff0c;另外一种是在 HTTP Request 的 body 中。 前一种方法&#xff0c;我们使用 HTML Form 中的 method "get&quo…

世界坐标系,摄像机坐标系、图像坐标系关系汇总

**摄像机标定&#xff1a;**在计算机视觉研究领域&#xff0c;摄像机标定是一个重要的环节。摄像机标定就是求取摄像机内外参数的过程。 世界坐标系&#xff1a;绝对坐标系&#xff0c;一般的三维场景都由这个坐标系来表示。摄像机可以放置在环境中的任何位置&#xff0c;因此可…

SpringMVC-HelloWorld

2&#xff0e;5、Hello World入门 2.5.1、准备开发环境和运行环境&#xff1a; ☆开发工具&#xff1a;eclipse ☆运行环境&#xff1a;tomcat6.0.20 ☆工程&#xff1a;动态web工程&#xff08;springmvc-chapter2&#xff09; ☆spring框架下载&#xff1a; spring-framework…

机器学习——支持向量机SVM之非线性模型(原问题和对偶问题)

目录 一、原问题&#xff08;prime problem&#xff09; 二、原问题的对偶问题&#xff08;dual problem&#xff09; 1、定义一个辅助函数 2、定义对偶问题 >>>问题1&#xff1a;上面说到遍历w&#xff0c;那w的取值范围和取值步长是怎样的&#xff1f;即遍历的…

(转)Apache Rewrite 详解

(转)Apache Rewrite 详解参考文档&#xff1a;http://man.chinaunix.net/newsoft/ApacheManual/mod/mod_rewrite.htmlApache Rewrite 详解一 入门RewriteEngine onRewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php就这两行. 然后就完成了URL重写功能了. 首先服务器是需要支…

python轮廓函数的使用

在图像的处理中有时候需要对图像中的目标区域提出出轮廓 读取图像 调用OpenCV的库使用cv.imread()来读取图像。 图像为 灰度化 二值化 提取轮廓时&#xff0c;图像一般都是二值化后的图像。在本次程序中选用cv2.THRESH_BINARY的二值化方式。即将大于阈值的部分设定为255&am…