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

时间:2015-01-12 22:55:46

标签: javascript node.js cordova cross-platform

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

是否已有工具可以执行此操作?我在谷歌上搜索过,但是因为这是我第一次尝试这个,也许我只是没有使用正确的搜索条件;我一直在使用“沙盒”这个词,但我不确定这是什么意思,因为沙盒似乎主要是关于安全性,而不是关于打包网络应用程序。

我们正在组建一个node-inspector样式的节点调试器,但与node-inspector不同,我们不使用Chromium的Blink调试器,我们不希望应用程序必须在浏览器,它只会将用于调试Web应用程序的用户与其他Web应用程序混淆。

如果我们可以将应用程序打包为已安装的应用程序,那么调试过程对用户来说似乎更为直接。由于我们不使用Blink,因此我们也不会依赖原生的Chrome功能调用,这似乎会破坏节点检查员的每个其他Chrome版本。所以,如果我能找到合适的工具来实现它,我相信这应该是可行的。

总结:

  • 我想将Node网络应用程序打包为本地可安装的应用程序。
  • 我希望它可以在Windows,OSX和Linux(至少是Ubuntu)上工作。
  • 请不要继续关注您是否认为我们应该构建调试器。这个问题是关于将Web应用程序打包为适当的本地应用程序以简化用户体验。谢谢:))

1 个答案:

答案 0 :(得分:1)

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

唯一的区别是,不是启动节点脚本来托管Web应用程序,而是将package.json指向index.html文件,您希望它在启动时托管。从那里你可以使用node-webkit API打开其他窗口等。它很棒!

让演示运行很容易。这是我如何制作一个小型演示,它读取我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

  4. 之后它super easy为OSX打包.app,为Windows打包.exe,为Linux打包.deb

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