【问题标题】:how to run a polymer app via "Run in Dartium" from console?如何通过控制台的“在 Dartium 中运行”运行聚合物应用程序?
【发布时间】:2014-07-09 15:48:18
【问题描述】:

我想直接通过命令行或通过 dart 文件中的“进程”调用聚合物 webapp。

我知道当通过 dart 编辑器运行它时,会在端口 8080 上创建一个服务器并监听 /web 文件夹的请求。

但是在启动时

dartium/chrome.exe 路径/To/Index.html

从控制台它只是在浏览器中加载文件,但不会为客户端启动服务器。

通过 file:://path/to/file.html [没有'dart is not runnning'警告,但没有聚合物含量] 或者 127.x.x.x.x.x.x.x.x:xxxxxxxx/app/index.html 显然会告诉我

'此网页不可用'

【问题讨论】:

    标签: dart dart-polymer


    【解决方案1】:

    DartEditor 推出 pub serve。您可以在没有 Darteditor 的情况下手动执行此操作(自 Dart 1.5 AFAIK 起)。刚启动

    pub serve
    

    在您的 Polymer 应用程序包目录中。
    在您的控制台应用程序中,使用从该服务器加载页面的 URL 启动浏览器。

    您还可以在控制台应用程序中包含 Web 服务器功能,为您的浏览器提供 Polymer 应用程序。

    pub help serve
    

    列出可用的选项。

    【讨论】:

      【解决方案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...");
        }
      }
      

      附言

      注意:

      如果您从 Dart 编辑器运行此脚本,当您在 Dart 编辑器中停止当前脚本时,编辑器将永远不会停止子进程的执行(在我们的例子中为 pub serve)。

      这不仅仅与此脚本有关。编辑器始终保持子进程处于活动状态。

      如果你从 cmd-line 运行它,它会正确终止 pub serve

      【讨论】:

      • 我没有尝试过code jet,所以这个例子是针对“Run in Dartium”或“Run as JavaScript”的,因为你使用的是默认浏览器。您将在何处以及如何指定
      • @H.R.它是launch polymer web app via pub serve 的命令行脚本。它可以用作从任何目录启动任何polymer web app 的全局脚本。示例(适用于 Windows 用户):%DART_SDK%\bin\dart pubserve.dart c:\users\user\dart\polymer_app01 polymer_app01.html。它也可以嵌入到您自己的网络应用启动器(命令行)中。
      • 我的意思是它是在生成js代码吗?或使用 dart 代码,因为在 runBrowsers 中您使用资源管理器,而不是 dartium。还是 pub serve 能同时为两者服务?没想到
      • @H.R.它执行的一项任务是(在我的示例中)Compiling polymer_app01|web/polymer_app01.html_bootstrap.dart...。这是pub 任务。您可以编写基本的聚合物应用程序并尝试通过此脚本启动它,并将结果作为控制台输出查看。这意味着网络应用程序可以在任何浏览器中执行。
      猜你喜欢
      • 1970-01-01
      • 2019-01-30
      • 2013-02-11
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 2023-03-19
      • 2012-11-07
      相关资源
      最近更新 更多