如何打包 Node Web 应用程序以便将其安装为本地应用程序?

How do I package up a Node web app so it can be installed as a local app?

我有一个 Node Web 应用程序,我想将其打包为一个独立的跨平台应用程序;有点像 Cordova,只是它仍然是幕后的 Node,而且它不适用于移动设备。我希望能够 运行 可执行文件并在某种本地沙箱中启动网络 运行 而不是必须在默认浏览器中访问。

是否已经有执行此操作的工具?我在 Google 上四处寻找,但由于这是我第一次尝试这样做,也许我只是没有使用正确的搜索词;我一直在使用 "sandbox" 这个词,但我不确定这就是我的意思,因为沙盒似乎主要是关于安全性,而不是关于打包 Web 应用程序。

我们正在组装一个 node-inspector-style node debugger, but unlike node-inspector we're not using Chromium's Blink 调试器,我们不希望该应用程序必须 运行 在浏览器中,这只会让不习惯用另一个网络应用程序调试网络应用程序的用户感到困惑网络应用程序。

如果我们可以将应用程序打包为已安装的应用程序,那么调试过程对用户来说似乎会更加简单。由于我们不使用 Blink,因此我们也不会依赖本机 Chrome 函数调用,这似乎每隔一个 Chrome 版本都会破坏节点检查器。所以我相信如果我能找到合适的工具来完成它,这应该是可行的。

总结一下:

找了一天终于找到了node-webkit。该项目将节点运行时与 webkit 运行时混合在一起,并将它们放在同一个线程中。您可以在前端 JavaScript 中直接使用节点的功能,因为该应用程序是本地打包的应用程序。

唯一的区别是,您无需启动节点脚本来托管 Web 应用程序,而是将 package.json 指向您希望它在启动时托管的 index.html 文件。从那里你可以使用 node-webkit API 打开额外的 windows 等。效果很好!

获取演示 运行 很容易。下面是我如何制作一个小演示,该演示读取我保存所有开发项目的 code 目录中的所有文件和目录,并将它们显示在页面上的 <ul> 元素中。


// node-webkit-playground/index.html
<!DOCTYPE html>
<html>
  <head>
    <title>node-webkit-playground</title>
    <style type="text/css">
      body {
        background-color: #000;
        color: #0f0;
      }
    </style>
    <script>
      var $ = require('jquery');
      var fs = require('fs');
      var path = require('path');
      var downloadedFiles = fs.readdirSync('/Users/chev/code');
      $(function () {
        var $fileList = $('#fileList');
        downloadedFiles.forEach(function (file) {
          var fileName = path.basename(file);
          $('<li>').text(fileName).appendTo($fileList);
        });
      })
    </script>
  </head>
  <body>
    <ul id="fileList">
    </ul>
  </body>
</html>

// node-webkit-playground/package.json
{
  "name": "node-webkit-playground",
  "main": "index.html",
  "window": {
    "toolbar": false,
    "frame": true,
    "width": 800,
    "height": 500,
    "position": "mouse",
    "min_width": 400,
    "min_height": 200,
    "max_width": 800,
    "max_height": 800
  }
}

然后从我的项目文件夹中:

  1. 从 npm 安装 jquery 并全局安装 nodewebkit。

    $ npm install jquery
    $ npm install -g nodewebkit

  2. 创建项目的 zip 存档,但将扩展名重命名为 .nw

    $ zip -r app.nw *

  3. 运行 使用 node-webkit 的文件。

    $ nodewebkit app.nw

之后super easy为OSX打包一个.app,为Windows打包一个.exe,甚至.deb Linux.

我相信这将是我们正在构建的调试工具的完美设置。