나는 소위, 서버와 클라이언트와의 프로젝트를 가지고 (자신의 디렉토리에 각각 개별 패키지를 설정) 한 :패키지 종속성이있는 클라이언트를 서비스하도록 HTTP 서버를 설정하는 방법은 무엇입니까?
$ ls -l project/server
pubspec.yaml
server.dart
packages
$ ls -l project/client
pubspec.yaml
packages
web
$ ls -l project/client/web
index.html
main.css
client.dart
지금 내가 문제가 이외의 아무것도를 제공하는 HttpServer에 점점 데 다음 코드를 사용하여 웹 디렉토리 :
void directoryHandler(dir, request) {
var indexUri = new Uri.file(dir.path).resolve('index.html');
virDir.serveFile(new File(indexUri.toFilePath()), request);
}
void main() {
Logger.root.onRecord.listen(new SyncFileLoggingHandler("server.log"));
virDir = new VirtualDirectory(Platform.script.resolve('../client/web').toFilePath())
..allowDirectoryListing = true
..followLinks = true
..directoryHandler = directoryHandler;
HttpServer.bind(InternetAddress.ANY_IP_V4, 8080).then((HttpServer server) {
log.info("HttpServer listening on port:${server.port}...");
server.listen((HttpRequest request) {
if (WebSocketTransformer.isUpgradeRequest(request)) {
log.info("Upgraded ${request.method} request for: ${request.uri.path}");
WebSocketTransformer.upgrade(request).then(handleWebSocket);
} else {
log.info("Regular ${request.method} request for: ${request.uri.path}");
virDir.serveRequest(request);
}
});
});
}
그리고 index.html을에서 :
<script src="../packages/browser/dart.js"></script>
VirtualDirectory를 client/web에 직접 해결하면 일반적인 정적 파일이 작동하지만 외부 (즉, 패키지 디렉토리)는 가져 오지 않습니다. 클라이언트 디렉토리 만 제공하려고하면 핸들러에서 web/index.html을 지정하면 다른 옵션은 선택되지 않습니다. 나는 또한 패키지 디렉토리를 웹에 복사하려고 시도했지만, 그 중 하나를 선택하지 않았다.
참고 : HttpServer가 빌드 디렉토리를 가리키는 다른 예제를 보았지만 jart로 다트를 컴파일하기 전에 프로젝트를 테스트하려고합니다.
전반적으로 서버가 실제로 클라이언트에 서비스를 제공하고 클라이언트에 자체 패키지가있는 서버/클라이언트 프로젝트를 설정하는 방법에 대해 혼란스러워합니다. 이 특정 사례에 대한 온라인 문헌을 찾을 수없는 것 같습니다.
"파일을 찾을 수 없음"오류가 모두 해결되도록 모든 파일을 제공한다는 문제를 결코 파악하지 못했지만 서버와 클라이언트를 제안하고 분할 할 때 개발 실습을 변경했습니다. 나는 dart2dart를 아직 시도하지 않았지만, dartium에서 애플리케이션을 테스트 할 필요가 없었습니다. – Crunchex