下面我通过一个简单的demo来介绍怎么样把一个web应用打包成一个可执行文件(这里只介绍windows环境)
首先新建一个index.html文件,作为我们这个demo的入口页面,我们暂且就把这个页面当成一个完整的web应用吧。内容随便写点什么,比如:

然后创建配置文件 package.json,内容如下:
其中的main属性就是用来指定入口文件的,这个属性的值可以是本地文件,也可以是远程网址,这样就相当于可以把一个远程的web应用直接变为一个桌面应用了。
现在我们有了两个文件了。
然后将<code>index.html</code>和<code>package.json</code>这两个文件压缩到一个zip压缩包里,命名为<code>app.zip</code>
现在app.zip这个压缩包里的内容应该是这样的:
然后把app.zip这个文件的扩展名改为nw,变为 app.nw
然后下载一个windows版本的node-webkit,解压后得到一个文件夹:
之后我们之前得到的app.nw这个文件就可以用nw.exe来执行了,直接把app.nw拖到nw.exe上就可以了。运行结果如下:
跟在chrome中打开index.html这个页面的效果差不多,当然你可以通过配置package.json这个文件,来隐藏浏览器的工具栏或边框,来使它更像是一个桌面软件。
因为nw文件的运行需要node-webkit环境的支持,所以我们还需要把app.nw这个文件跟node-webkit的环境文件一起打包成一个可执行文件。
首先打开windows的cmd,然后输入如下命令:
注意文件路径要根据你的实际情况进行变动,这里假设<code>app.nw</code>放在了<code>node-webkit</code>的主文件夹里,然后输出的``也会在这个文件夹里。
执行命令后我们得到了<code>app.exe</code>这个可执行文件。
到了这步,我们已经得到了app.exe这个文件,但如果只有app.exe这个文件还是不够的,这个可执行文件的运行还需要几个dll文件的支持。
其中 nw.pak 与 icudt.dll 这个两个文件是必须要的。
ffmpegsumo.dll 文件是媒体支持文件,如果你的html页面中用到了
<video></video>
libegl.dll 和 libglesv2.dll 这个两个文件则是使用webgl或gpu必须要的
最后我们得到的就是这样一个文件夹:
执行app.exe就可以运行我们的demo了。
但我们大多数人想的是给用户一个exe文件,用户就可以使用了,不用再附带一些其他文件。
嗯,所以我们还可以把app.exe跟其他的文件再打包一次,把上图中的所有文件变成一个可执行文件,用户只要得到这个文件,就能运行我们的应用了。
然后在enter input file name那里输入我们的app.exe的路径,在enter output file name那里填写我们要把打包出来的可执行文件输出到哪里。最后是把除app.exe外的其它文件拖入到files那里,遇到提示的话默认就可以了。
最后点击右下角的process按钮,就大功告成了。
最后我们得到了一个 <code>app_boxed.exe</code> 的文件,只要把这个文件交给用户,用户就可以运行了。
<code>node-webkit</code>虽然方便,但有个很大的缺点是得到的可执行文件有点大,大家在可以在衡量利弊后决定使不使用。