2

これは私の(単純化された)フォルダ構造です:

/
  pubspec.yaml
  build/
    client.dart.js, etc
  lib/
    game.dart
  server/
    server.dart
  web/
    client.dart
    canvas.dart
    index.html

これらのファイルを提供するために、「dartiverse search」サンプルのコードを使用しています (簡略化)。

var buildDirectory = new Http.VirtualDirectory(buildPath);
buildDirectory.jailRoot = false;

// Serve everything not routed elsewhere through the virtual directory.
buildDirectory.serve(router.defaultStream);

// Special handling of client.dart. Running 'pub build' generates
// JavaScript files but does not copy the Dart files, which are
// needed for the Dartium browser.
router.serve("/client.dart").listen((request) {
  Uri clientScript = Platform.script.resolve("../web/client.dart");
  buildDirectory.serveFile(new File(clientScript.toFilePath()), request);
});

router.serve("/canvas.dart").listen((request) {
  Uri clientScript = Platform.script.resolve("../web/canvas.dart");
  buildDirectory.serveFile(new File(clientScript.toFilePath()), request);
});

router.serve("/lib/game.dart").listen((request) {
  Uri clientScript = Platform.script.resolve("../lib/game.dart");
  buildDirectory.serveFile(new File(clientScript.toFilePath()), request);
});

私の質問は、.dart ファイルが lib/ フォルダーと web/ フォルダーに分割されているプロジェクトでファイルを提供するためのより良い方法はありますか? 上記の方法はいくつかのファイルに対してはうまくいくかもしれませんが、プロジェクトが大きくなり、そのような .dart ファイルが 50 個ある場合はどうなるでしょうか?

4

1 に答える 1

1

私は通常、自分の VirtualDirectory を web/ に向けているので、web/ 内のファイルのパスをマップする必要はありません。

lib/ 内のファイルの場合、Dart エディター (Pub) は、プロジェクトのパッケージ ディレクトリを指すシンボリック リンク パッケージを web/ に作成します。そのパッケージ ディレクトリには lib/ のコンテンツも含まれているため、web/ からの相対位置で /packages//game.dart を使用して game.dart にアクセスできます。Dart コードのパッケージ インポートも、このパスを使用してソースをフェッチします。

これで、すべてのファイルが VirtualDirectory によって提供され、websocket などのルーターのみが必要になります。

于 2014-02-18T14:46:38.200 に答える