2013-04-25 13 views
11

多くのJavaScriptライブラリには、クライアントへのダウンロード帯域幅コストと、実際に必要な機能を分離する点で、依存するライブラリの機能を「整形」できるBuilderツールがあります。AMDモジュールシェーピング:1つのJS関数だけをロードするには?

たとえば、私はsugar.jsの中で多くのものが好きですが、カタカナとひらがなの文字セット処理は必要ない、最も単純な例として、私はsugar.jsを "shape"してstring.isBlank()をエクスポートできるようにしたいと考えています。

私のためにこれを行うためのツールがありますか? EcmaScript委員会がJavaScriptの将来のバージョンでこれを行うための継続的な努力はありますか? TypeScriptやCoffeeScriptのような高水準言語は、このような「整形」の隠れたサポートを提供しますか?私はmonolinker経由で.NET DLLのC#でこのような "整形"を行うことができます。

基本的に、現代のコンパイラのローダーの側面をAMDが処理するように見えますが、リンカの面は処理しません。 jquerydojoのビルダーは特定のモジュールでのみ動作し、真のリンカではなくビルダーです。

更新:Google Closure Compilerは、JavaScriptを入力として受け取り、出力としてJavaScriptを生成するコンパイラです。一緒に、これらのエクスポート文を置くことは、あまりにも退屈そうです

場合、あなたはあなたのためのエクスポートを行うための機能を使用することができます。Advanced Compilation and Externsドキュメントには、これを行うためのAPI呼び出しがあることを示唆しています。エクスポート関数の例については、クローズライブラリ関数goog.exportSymbol()およびgoog.exportProperty()を参照してください。

しかし、これはかなり畳み込まれているように見えますが、Google閉鎖コンパイラに直接依存しています。現時点では、EcmaScript委員会のCommonJSに関する将来の基準や、この問題を考えてそれに取り組む人々の知恵を探しています。特に仲間のTypeScript開発者から。私はsugar.js用のTypeScriptで宣言ファイルを作成し、次にTypeScriptコンパイラ出力に対してGoogle Closure Compilerを使用する必要はありません。それは非常に複雑で難しいと思います。

+0

これは良い質問です。どのツールもこれを自動的に行うことはできないと思います。 JavaScriptは非常に柔軟性があり、実行時に、またはアプリケーションの状態に応じて関数の変更を見るのはまれではありません。実際に関数を簡単に抽出するのは難しいかもしれません。ですから、元の著者がオプションを組み込んでいない場合、リンカを使ってjQueryから '$ .each'を得ることはできません。これが来るかもしれない?多分、私は近い将来にそれを見ませんでした。 (静的解析ツールで行われた作業は、今のところこのように役立つかもしれません) –

+0

これは私が疑ったことです。私はMS ResearchのAllen Wirfs-BrockとNikolai Tillmanが、6行のJSコードブロックが解釈の際に*変数がどのようにタイプされているかに依存して、12の異なる意味を持つことができる例を挙げているのを見ました。したがって、私はなぜTypeScriptとオプションのタイピングをサポートする他の高レベルのランゲージについても尋ねました。ありがとう! –

+0

ここで、ニコライの例は、VMIL 2010(http://www.cs.iastate.edu/~design/vmil/2010/slides/p03-tillmann-slides.pdf)の彼のSPURトークから取られたものです。 var sum = 0;以下のための (VAR I = 0;私は1000年<;私は++){ (のi == 990){ 合計+ = "Hello World" の } 合計+ = 1 場合} プリント(合計)は –

答えて

2

残念ながら、この "シェイピング"を行うためのJavaScriptは何も組み込まれておらず、実際にはコンパイラが必要です。大体の役割の1つは、メソッドだけでなく多くのレベルで "シェイピング" )。

Closure Compilerは成熟したオープンソースです(JQueryはClosure Compilerを使用して実際に縮小されています)。だから、コンパイラのためにJSコードに注釈を付けるつもりならば、これも同様です。

コンパイラを使用することによる膨大な数の利点があります。それらは、あなたのファイルのサイズ(ひいては解釈/実行時間)を、あなたのインクルードされたライブラリを単純に形作るよりも大幅に削減します。そして開発中は、バグを早期に発見するのに役立つ多くのメッセージが生成されます。

関連する問題