1

シェルフ静的サーバーを使用してポリマー アプリケーションを提供しようとしています。次の構造を作成します。

    ポリマーアプリ
      -pubspec.yml
      - 置き場
          - server.dart
      - ウェブ
          - index.html
      - ライブラリ
          - main_app.dart
          - main_app.html

server.dart 内に次のコードを配置します。

import 'dart:io' show Platform;
import 'dart:async' show runZoned;
import 'package:path/path.dart' show join, dirname;
import 'package:shelf/shelf_io.dart' as io;
import 'package:shelf_static/shelf_static.dart';

void main() {
  // Assumes the server lives in bin/ and that `pub build` ran
  var pathToBuild = join(dirname(Platform.script.toFilePath()),
      '..', 'web');

  var handler = createStaticHandler(pathToBuild,
      defaultDocument: 'index.html');

  var portEnv = Platform.environment['PORT'];
  var port = portEnv == null ? 9999 : int.parse(portEnv);

  runZoned(() {
    io.serve(handler, '0.0.0.0', port);
    print("Serving $pathToBuild on port $port");
  },
  onError: (e, stackTrace) => print('Oh noes! $e $stackTrace'));
}

残りはダーツエディタで作成したテンプレートポリマーアプリケーションです。

問題は、ブラウザーから localhost:9999 にアクセスしようとすると、次のエラーが表示されることです。

    リソースの読み込みに失敗しました: サーバーは 404 (見つかりません) のステータスで応答しました
      http://localhost:9999/packages/paper_elements/roboto.html
    リソースの読み込みに失敗しました: サーバーは 404 (見つかりません) のステータスで応答しました
      http://localhost:9999/packages/polymertest/main_app.html
    リソースの読み込みに失敗しました: サーバーは 404 (見つかりません) のステータスで応答しました
      http://localhost:9999/packages/polymer/init.dart
    ファイルの読み込み中にエラーが発生しました: package:polymer/init.dart

より迅速な開発方法のためにこれを行いたいと思います。その場合、変更を加えるたびに Polymer-Dart アプリケーションをビルドする必要はありません。

4

2 に答える 2

2

に渡すことができserveFilesOutsidePath: trueますcreateStaticHandler()

 var handler = createStaticHandler(pathToBuild,
   defaultDocument: 'index.html',
   serveFilesOutsidePath: true);

また、開発中にインクリメンタル ビルドに使用できpub serveますshelf_proxy例については、こちらを参照してください。

于 2015-02-12T01:01:20.150 に答える
0

開発中のshelf_proxyとprodのshelf_staticの組み合わせは非常に便利です。巧妙なダーツ チームがそれらを組み合わせるというアイデアを思いつき、私はそのアイデアをモヒートで借りました。次のように使用できます

import 'package:mojito/mojito.dart';

final app = mojito.init();

app.router..addStaticAssetHandler('/ui');

そのためのコードはここにあります。必要に応じてコピーできます

于 2015-02-12T08:06:40.120 に答える