2016-10-21 1 views
-4

dart2js로 .dart 파일을 컴파일하지만 컴파일되지 않은 .js 파일에 예상치 못한 코드가 들어 있습니다. 다트는 어떻게 자바 스크립트로 컴파일합니까?다트는 javascript로 어떻게 컴파일됩니까?

다트 코드 :

import 'dart:html'; 


void main() { 
    querySelector("#answer").onClick.listen(check); 
} 

void check(MouseEvent event){ 
    var answer; 
    answer = (querySelector("#text_answer") as InputElement).value; 
    answer = answer.toUpperCase(); 

    if (answer == "CHOCOLATE") { 
    querySelector("#text").text = "Smells like... you are right! Well, try to find somthing round, made of glass;)"; 
    return; 
    } else { 
    querySelector("#text").text = "No, No, No. Try one more time. There’s white and milk and dark. These three types you might eat. As a type of candy, it really can’t be beat"; 
    } 
} 

컴파일의 .js 코드 (댓글 없음) 이상의 7000 선이있다.

+2

무엇을 기대하지 않으셨습니까? –

+0

'dart2js '라는 도구가 컴파일러가 아니라는 점에서 문제가 있습니다. 컴파일러는 높은 수준의 프로그래밍 언어를 낮은 수준의 프로그래밍 언어로 변환합니다. 그러나 Javasrcript는 저수준 프로그래밍 언어가 아닙니다. dart2js는 transpiler입니다 (Google Dart 개발자가 번역이 아닌 컴파일로 이러한 프로세스를 호출 한 이유를 알지 못합니다). 이 부정확성 (번역 대신 컴파일)은 오해의 소지가있는 사람 (예 :이 질문의 작성자)이 될 수 있지만 모든 것이 정확합니다. dartjs는 코드를 번역하고 런타임 라이브러리 코드를 추가합니다. – mezoni

+1

기술적으로 "컴파일러"는 한 언어의 프로그램을 다른 언어의 의미 상 동일한 프로그램으로 변환합니다. 프로그램을 직접 실행하는 "인터프리터"와 구별됩니다. "transpiler"는 일반적으로 낮은 수준의 기계어 (assemebler, 바이트 코드, 기계 코드) 대신 다른 사용자가 쓸 수있는 언어 (예 : 다트에서 JavaScript)로 컴파일하는 데만 사용되는 컴파일러의 또 다른 이름입니다. . 그래도 변환기는 컴파일러이므로 dart2js를 컴파일러로 호출하는 것은 정확합니다. – lrn

답변

0

다트가 제공하는 기능을 에뮬레이트하는 코드가 꽤 많이 있지만, 클래스, 믹스 인 등과 같이 ES5로 직접 변환 할 수는 없습니다.

예를 들어 jQuery와 같이 모든 브라우저에서 동일한 다트 코드가 작동하도록하기 위해 브라우저 기능이 사라지는 polyfills가 포함되어 있습니다.

이 코드는 이론적으로 라이브러리 파일 (like jQuery)에 넣을 수 있지만 그 파일은 매우 클 수 있습니다.

다트 나무 흔드는 (actually it's tree-growing 실제로 main() 파일 (직접 또는 전이에서 참조되지 않는 모든 코드 제거하기 위해 사용하는 크기). 라이브러리의 모든 사용하지 않는 클래스의 방법이나 기능을 줄이기 위해 그 다른 파트가 사용되는 클래스와 라이브러리에서는 사용되지 않습니다.

즉, 실제로 모든 JS 출력에 포함 된 Dart 기본 라이브러리의 부분은 달라질 수 있습니다. 따라서 손으로 작성한 응용 프로그램 코드에서 생성 된 JS 이외에 index.html에 추가 할 기본 dart.js 파일을 사용할 수 없습니다.

관련 문제