2016-10-21 13 views
-4

私はdart2jsで自分の.dartファイルをコンパイルしますが、コンパイルされた.jsファイルには、私が見たくないコードが含まれています。ダーツはどのようにしてjavascriptにコンパイルされますか?ダーツはどのように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は蒸散器です(Google Dartの開発者がそのようなプロセスを翻訳ではなくコンパイルと呼んだ理由はわかりません)。この不正確さ(翻訳の代わりにコンパイル)は、誰かを誤解させるかもしれませんが(例えば、この質問の著者)、すべて正しいです.dartjsはコードを翻訳し、ランタイムライブラリコードを追加します。 – mezoni

+1

技術的には、「コンパイラ」はある言語のプログラムを別の言語の意味的に同等のプログラムに変換します。プログラムを直接実行する「インタプリタ」とは区別されます。 "transpiler"は、通常、低レベルの機械語(assemebler、バイトコード、マシンコード)の代わりに別のユーザー書き込み可能言語(例えば、DartからJavaScriptへ)にコンパイルするためにのみ使用されるコンパイラの別の名前です。 。それでも、transpilersはコンパイラなので、dart2jsをコンパイラと呼ぶのは正しいです。 – lrn

答えて

0

ダーツが提供する機能をエミュレートするコードがかなり含まれていますが、クラス、ミックスインなどのように直接ES5に変換することはできません。

jQueryのように、すべてのブラウザで同じDartコードを使用できるようにするために、ブラウザの機能が欠落していることもあります。

このコードは、理論的にはライブラリファイル(like jQuery)に入れることができますが、そのファイルは膨大になります。

サイズを小さくするにはダーツはツリーシェイク(actually it's tree-growing)を使用して、実際にmain()ファイルから参照されていないコードをすべて除去します(直接または推移的)。

これは、すべてのアプリケーションに対して、実際にJS出力に含まれているDartベースライブラリの部分が異なる可能性があることを意味します。 したがって、他の部分が使用されているクラスおよびライブラリは使用できません。手書きのアプリケーションコードから生成されたJSに加えて、index.htmlに追加する既定のdart.jsファイルを作成することはできません。

関連する問題