打包 NodeWebkit 和 Web 服务器

Package NodeWebkit and Web Server

我的应用程序已准备好分发,我决定使用 NodeWebkit。现在,问题是我的应用程序加载了本地文件,为此我需要一个网络服务器。如何将 NodeWebkit 和一些 Web 服务器打包在一起?如果无法将 Web 服务器添加到 NodeWebkit,我如何将我的文件(图像、脚本、css)加载到 html?谢谢! :)

setTimeout(function() {
var http = require("http"),
    url = require("url"),
    path = require("path"),
    fs = require("fs"),
    port = process.argv[2] || 8888;

var server = http.createServer(function(request, response) {

  var uri = url.parse(request.url).pathname
    , filename = path.join(process.cwd(), uri);

  fs.exists(filename, function(exists) {
    if(!exists) {
      response.writeHead(404, {"Content-Type": "text/plain"});
      response.write("404 Not Found\n");
      response.end();
      return;
    }

    if (fs.statSync(filename).isDirectory()) filename += '/index.html';

    fs.readFile(filename, "binary", function(err, file) {
      if(err) {        
        response.writeHead(500, {"Content-Type": "text/plain"});
        response.write(err + "\n");
        response.end();
        return;
      }

      response.writeHead(200);
      response.write(file, "binary");
      response.end();
    });
  });
}).listen(parseInt(port, 10));
}, 1000);

Node-webkit 基本上是 node.js 和 chromium 浏览器的组合。如果你想让你的服务器与你的应用程序一起使用,你可以在节点中编写一个服务器。

查看节点主节点documentation

在你的package.json

{
  "name": "nw-demo",
  "node-main": "index.js",
  "main": "index.html"
}

mode-main 基本上是一个在 node 上下文中运行并在应用程序启动时启动的脚本。

The script will be running in Node's context which won't be destroyed across page navigation in Webkit, so it can be used to write some 'background' or 'daemon' like code.

因此您可以在 127.0.0.1 上本地编写和启动 http 服务器并与其通信。


如果您只关心加载资源,您可以通过提供绝对或相对路径直接添加它们。

例如:

<link rel="stylesheet" type="text/css" href="/bower_components/angular-ui-grid/ui-grid.css"/>
<script src="/bower_components/jquery/dist/jquery.min.js"></script>

使用应用协议

此外,nw.js 中提供了一个 app:// 协议,您可以使用它来访问本地文件。见 documentation.

注:

The root of path refers to the application's directory, which is the directory where the manifest file resides.