如何从飞镖架静态文件处理程序提供聚合物应用程序?
How to serve a polymer application from dart shelf static file handler?
我正在尝试使用货架静态服务器为聚合物应用程序提供服务。我创建下一个结构:
聚合物应用程序
- 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
我想这样做是为了更快的开发方式。在那种情况下,我不需要在每次进行更改时都构建 polymer-dart 应用程序。
您可以将 serveFilesOutsidePath: true
传递给 createStaticHandler()
var handler = createStaticHandler(pathToBuild,
defaultDocument: 'index.html',
serveFilesOutsidePath: true);
此外,在开发过程中,您可以使用 pub serve
和 shelf_proxy
进行增量构建。有关示例,请参阅 here。
dev中shelf_proxy在prod中shelf_static的组合很有用。聪明的飞镖团队想出了将它们结合起来的想法,我在莫吉托中借鉴了这个想法。您可以按如下方式使用
import 'package:mojito/mojito.dart';
final app = mojito.init();
app.router..addStaticAssetHandler('/ui');
该代码是 here,如果您愿意,可以复制它
我正在尝试使用货架静态服务器为聚合物应用程序提供服务。我创建下一个结构:
聚合物应用程序 - 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
我想这样做是为了更快的开发方式。在那种情况下,我不需要在每次进行更改时都构建 polymer-dart 应用程序。
您可以将 serveFilesOutsidePath: true
传递给 createStaticHandler()
var handler = createStaticHandler(pathToBuild,
defaultDocument: 'index.html',
serveFilesOutsidePath: true);
此外,在开发过程中,您可以使用 pub serve
和 shelf_proxy
进行增量构建。有关示例,请参阅 here。
dev中shelf_proxy在prod中shelf_static的组合很有用。聪明的飞镖团队想出了将它们结合起来的想法,我在莫吉托中借鉴了这个想法。您可以按如下方式使用
import 'package:mojito/mojito.dart';
final app = mojito.init();
app.router..addStaticAssetHandler('/ui');
该代码是 here,如果您愿意,可以复制它