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'));
}

其余的是 dart 编辑器创建的模板聚合物应用程序。

问题是当我尝试从浏览器访问 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

我想这样做是为了更快的发展方式。在这种情况下,我不需要每次进行更改时都构建聚合物飞镖应用程序。

4

2 回答 2

2

你可以serveFilesOutsidePath: true传给createStaticHandler()

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

此外,在开发过程中,您可以使用pub servewithshelf_proxy进行增量构建。有关示例,请参见此处。

于 2015-02-12T01:01:20.150 回答
0

prod中devshelf_static中shelf_proxy的组合非常有用。聪明的飞镖团队想出了将它们结合起来的想法,我在 mojito 中借用了这个想法。您可以按如下方式使用它

import 'package:mojito/mojito.dart';

final app = mojito.init();

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

代码在这里,如果您愿意,可以复制

于 2015-02-12T08:06:40.120 回答