我想通过命令行直接调用聚合物webapp或通过' Process'在飞镖文件中。
我知道当通过dart编辑器运行它时,会创建端口8080上的服务器并侦听/ web文件夹的请求。
但启动时
dartium / chrome.exe路径/ To / Index.html
从控制台只需在浏览器中加载文件,但不会为客户端启动服务器。
通过 file :: //path/to/file.html [no' dart not runnning'警告,但没有聚合物含量] 要么 127.x.x.x.x.x.x.x.x:xxxxxxxx / app / index.html显然会告诉我
'此网页不可用'
答案 0 :(得分:5)
DartEditor推出pub serve
。您可以在没有Darteditor的情况下手动执行此操作(自Dart 1.5 AFAIK起)。刚刚发布
pub serve
在Polymer应用程序包目录中 在您的控制台应用程序内部启动浏览器,其中包含从此服务器加载页面的URL。
您还可以将Web服务器功能包含在为您的浏览器提供Polymer应用程序的控制台应用程序中。
pub help serve
列出了可用的选项。
答案 1 :(得分:2)
您可以尝试使用此脚本作为示例how to call a polymer webapp directly via 'Process' in a dart file
。
此示例还包括启动默认浏览器。
import "dart:async";
import "dart:io";
import "package:path/path.dart" as pathos;
void main(List<String> args) {
String app;
String file;
switch (args.length) {
case 1:
app = args[0];
break;
case 2:
app = args[0];
file = args[1];
break;
default:
print("Usage: pubserve.dart app_path [file_name]");
exit(0);
}
if(!new Directory(app).existsSync()) {
print("Directory not exists: $app");
exit(-1);
}
pubServe(app, file).then((exitCode) {
exit(exitCode);
});
}
Future<int> pubServe(String app, String file) {
var sdk = Platform.environment["DART_SDK"];
if (sdk == null) {
print("Dart SDK not found");
return new Future(() => -1);
}
var executable = pathos.join(sdk, "bin", "pub");
var pattern = r"^Serving (?:.*) web on (.*)$";
var regexp = new RegExp(pattern);
return Process.start(executable, ["serve"], runInShell: true,
workingDirectory: app).then((process) {
process.stdout.listen((data) {
var string = new String.fromCharCodes(data);
for (var c in data) {
stdout.writeCharCode(c);
}
var match = regexp.matchAsPrefix(string);
if (match != null) {
var url = match.group(1);
if (file != null) {
url += "/$file";
}
Timer.run(() => runBrowser(url));
}
});
process.stderr.pipe(stderr);
stdin.pipe(process.stdin);
return process.exitCode.then((exitCode) {
return exitCode;
});
});
}
void runBrowser(String url) {
var fail = false;
switch (Platform.operatingSystem) {
case "linux":
Process.run("x-www-browser", [url]);
break;
case "macos":
Process.run("open", [url]);
break;
case "windows":
Process.run("explorer", [url]);
break;
default:
fail = true;
break;
}
if (!fail) {
//print("Start browsing...");
}
}
P.S。
注意:强>
如果从Dart编辑器运行此脚本,当您在Dart编辑器中停止当前脚本时,编辑器将永远不会停止执行子进程(在我们的示例中为pub serve
。
这与此脚本无关。编辑器始终保持子进程存活。
如果从cmd-line运行它,它会正确终止pub serve
。