如何通过“Run in Dartium”从控制台运行聚合物应用程序?

时间:2014-07-09 15:48:19

标签: dart dart-polymer

我想通过命令行直接调用聚合物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显然会告诉我

'此网页不可用'

2 个答案:

答案 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