Как подать полимерное приложение из обработчика статических файлов на полке 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');
Код для этого здесь, который вы можете скопировать, если вы предпочитаете