Как подать полимерное приложение из обработчика статических файлов на полке dart?

Я пытаюсь обслуживать полимерное приложение, используя полочный статический сервер. Я создаю следующую структуру:

    polymerapp
      - pubspec.yml
      - бен
          - server.dart
      - веб
          - index.html
      - lib
          - 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: // локальный: 9999 / пакеты /paper_elements/roboto.html
    Не удалось загрузить ресурс: сервер ответил со статусом 404 (не найдено)
      HTTP: // локальный: 9999 / пакеты /polymertest/main_app.html
    Не удалось загрузить ресурс: сервер ответил со статусом 404 (не найдено)
      HTTP: // локальный: 9999 / пакеты / полимер / init.dart
    Произошла ошибка при загрузке файла: пакет: полимер / init.dart

Я хочу сделать это для более быстрого развития. В этом случае мне не нужно создавать приложение polymer-dart каждый раз, когда я вносил изменения.

2 ответа

Решение

Вы можете пройти serveFilesOutsidePath: true в createStaticHandler()

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

Также в процессе разработки вы можете использовать pub serve с shelf_proxy для наращивания. Смотрите здесь для примера.

Комбинация Shel_Proxy в Dev Shel_static в Prod очень полезна. Умная команда дартс пришла в голову идея объединить их, и я позаимствовал эту идею в мохито. Вы можете использовать его следующим образом

import 'package:mojito/mojito.dart';

final app = mojito.init();

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

Код для этого здесь, который вы можете скопировать, если вы предпочитаете

Другие вопросы по тегам