【问题标题】:How do I package up a Node web app so it can be installed as a local app?如何打包 Node Web 应用程序以便可以将其安装为本地应用程序?
【发布时间】:2015-01-12 22:55:45
【问题描述】:

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

是否已经有工具可以做到这一点?我在谷歌上四处寻找,但因为这是我第一次尝试这个,也许我只是没有使用正确的搜索词;我一直在使用“沙盒”这个词,但我不确定这就是我的意思,因为沙盒似乎主要是关于安全性,而不是打包一个网络应用程序。

我们正在组合一个node-inspector 样式的节点调试器,但与节点检查器不同的是,我们不使用 Chromium 的 Blink 调试器,我们不希望应用程序必须在浏览器中运行,它只将不习惯调试 Web 应用程序的用户与另一个 Web 应用程序混淆。

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

总结一下:

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

【问题讨论】:

  • 那个用cordova做不到,cordova不支持服务端代码,但是你可以搜索“package node app”,也许这个链接对你有帮助github.com/rogerwang/node-webkit/wiki/…jxcore.com/turn-node-applications-into-executables
  • 我怀疑你会找到一个框架来打包你的应用程序。将您的节点封装到 OS X 应用程序中是相当简单的。使用 Xcode、NSWebView 和任何类型的本地存储。沙盒绝对是错误的搜索词。
  • @jcesarmobile 我不是在问如何使用 Cordova。事实上,我什至说过“有点像 Cordova,只是它仍然是幕后的节点,而且不适用于移动设备。”我确实发现了 node-webkit,它正是我所需要的。谢谢!
  • @mahaltertin 谢谢。 Node-webkit 确实允许你打包你的应用程序。看看我的答案:D

标签: javascript node.js cordova cross-platform


【解决方案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

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

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

【讨论】:

    猜你喜欢
    • 2017-05-29
    • 2011-03-27
    • 2012-08-20
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多