1

私のアプリは配布の準備ができており、NodeWebkit を使用することにしました。問題は、アプリがローカル ファイルをロードすることであり、そのためには Web サーバーが必要です。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);
4

1 に答える 1

1

Node-webkit は、基本的に node.js と chromium ブラウザーの組み合わせです。アプリでサーバーを使用する場合は、サーバーをノードに記述できます。

Node の主なドキュメントを確認してください

あなたのpackage.jsonで

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

mode-main基本的には、ノードコンテキストで実行され、アプリケーションの開始時に開始されるスクリプトです。

スクリプトは Node のコンテキストで実行され、Webkit のページ ナビゲーションで破棄されないため、「バックグラウンド」または「デーモン」のようなコードを記述するために使用できます。

したがって、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>

アプリ プロトコルを使用する

さらに、app://ファイルにローカルにアクセスするために使用できる nw.js で提供されるプロトコルがあります。ドキュメントを参照してください。

ノート:

パスのルートは、マニフェスト ファイルが存在するディレクトリであるアプリケーションのディレクトリを参照します。

于 2016-01-14T18:07:32.303 に答える