2014-07-09 2 views
3

다트 파일에서 명령 행 또는 '프로세스'를 통해 직접 폴리머 웹 애플리케이션을 호출하려고합니다.콘솔에서 "Dartium에서 실행"을 통해 폴리머 앱을 실행하는 방법은 무엇입니까?

다트 편집기를 통해 실행하면 포트 8080의 서버가 만들어지고/web 폴더 요청을 수신 대기합니다.

하지만

dartium/chrome.exe의 경로를 실행/콘솔/Index.html을

는 단순히 브라우저 내에서 파일을로드하지만 늘 클라이언트에 대한 서버를 시작합니다. 파일 :: //path/to/file.html를 통해

[경고 '를 다트 실행 해하지된다',하지만 폴리머 내용] 또는 127.xxxxxxxx : XXXXXXXX/응용 프로그램/index.html을 분명히 말할 것입니다 나

답변

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.

참고 : 다트 편집기에서이 스크립트를 실행하면 당신은 다트 편집기에서 현재 스크립트를 중지 할 때

, 편집기 (우리의 경우 pub serve) 서브 프로세스의 실행을 중지하지 않습니다.

이것은이 스크립트에만 관련이 없습니다. 편집자는 항상 하위 프로세스를 활성 상태로 유지합니다.

cmd-line에서 실행하면 pub serve이 올바르게 종료됩니다.

+0

코드 제트를 사용하지 않았으므로 기본 브라우저를 사용하기 때문에이 예제는 "Run in Dartium"또는 "JavaScript로 실행"입니다. 어디서 어떻게 지정하겠습니까? –

+0

@ H.R. pub serve를 통한'launch polymer web app'를위한 커맨드 라인 스크립트입니다. 그것은 어떤 디렉토리에서든'polymer web app'를 시작하기위한 전역 스크립트로 사용될 수 있습니다. 예 (Windows 사용자) :'% DART_SDK % \ bin \ dart pubserve.dart c : \ users \ user \ dart \ polymer_app01 polymer_app01.html'. 또한 자신의 웹 응용 프로그램 실행기 (명령 줄)에 포함시킬 수 있습니다. – mezoni

+0

js 코드를 생성한다는 의미입니까? 또는 다트 코드로 작업하십시오. 달리기에서는 dartium이 아닌 탐색기를 사용하기 때문입니다.또는 선술집은 둘 다 봉사하기 위하여 마술을 봉사합니까? 그렇게 생각하지 않았다. –

4

DartEditor는 pub serve를 lauches '이 웹 페이지를 사용할 수 없습니다'. Darteditor없이 수동으로이 작업을 수행 할 수 있습니다 (Dart 1.5 AFAIK 이후). 시작하려면 Polymer 앱 패키지 디렉토리에서

pub serve 

을 가져 오십시오.
콘솔 앱에서이 서버에서 페이지를로드하는 URL로 브라우저를 실행하십시오.

브라우저에 Polymer 앱을 제공하는 콘솔 응용 프로그램에 웹 서버 기능을 포함시킬 수도 있습니다.

pub help serve 

에는 사용 가능한 옵션이 나열되어 있습니다.