2013-06-16 19 views
15

これはTypescriptでrequirejsが必要な理由とタイミングに関する一般的な質問です。 私はrequireJsでいくつかの作業をしていましたが、展開する前に必ずr.jsビルドスクリプトを使用しました。 私はすべてのjsファイル(モジュール)をマージするビルドスクリプトを理解しているので、httpリクエストの量を減らすことがあなたのコードをモジュレーションする方法を提供します。Typescriptなぜrequirejsが必要なのか

私の質問はこれです:typescriptですが、すでにモジュールにコードを分離するための簡単な方法を提供するので、なぜだけではなく、モジュールを処理するためにrequirejsを使用して、余分なステップで、 たJSファイルをマージしませんか? 大きなプロジェクトで作業している場合、すべてのjを一度に読み込むべきではないことを理解していますが、何らかの方法でモジュールをバンドルしていると思います。

編集:具体的には: なぜ私のモジュールを管理し、ちょうど私がまた、実行時にロードすることができます理解されるように内部モジュールを、活字体に固執ないため使用requireJs。 amdとrequirejsに基づく内部モジュール対外部モジュール。

+0

なぜあなたは*両方とも必要であると仮定しますか?誰があなたに両方を使うように言ったのか?何か問題があれば懇願するようです。あなたがrequirejsを使用するのは、縮小されたuberjsを作成することだけであれば、明らかに冗長です。 – millimoose

答えて

1

説明したユースケースでは、結果のjsファイルを手動でマージする必要がないため、requireJSは必要ありません。 typescriptコンパイラはこれを行うことができます。 tscコマンドにオプションを指定できます。これにより、すべての.tsファイルがコンパイルされ、1つのJavaScript出力ファイルが生成されます。これにより、Typescript moduleキーワードを使用して、コードを別々の.tsファイルでモジュールに分割し、最適化された展開のためにそれらをマージすることができます。

TypeScriptからAMDにエクスポートするモジュールの形式を変更できます。これらのモジュールをロードするにはRequireJSが必要です。また、RequireJS用のプラグインもあります。非同期ロードテキストファイル

+0

ありがとうございます - 私はコンパイラで使用する--outパラメータについて知っています。これは、typescriptもサポートするflashdevelopを使用してデフォルト設定されます。しかし、多くのチュートリアルでは、multipalsight http://bit.ly/10ovDqbを含めて、なぜrequireJSが必要なのか説明しません。ですから、requirejsが必要な場合の例や使用例は、基本的に私が探しているものです。 - ありがとうございました – ddennis

+0

TypeScriptからAMDにエクスポートされるもののモジュールフォーマットを変更することができます。これらのモジュールをロードするにはRequireJSが必要です。また、RequireJS用のプラグインもあります。非同期ロードテキストファイル。 –

2

ページロード中にJSファイルを1つだけロードすると、requireJSは必要ありません。
複数のjsファイルがあり、index.htmlにロードされないようにするには、スクリプトの実行時にrequireJSが必要です。これらは非同期に読み込まれ、一度だけ読み込まれます。スクリプトを要求した後のコードは、必要なスクリプトのロード後にのみ実行されます。 これは、ユーザーがモジュールをまったく必要としないかどうかわからないときに、遅延読み込みに特に役立ちます。
他の利点は、他のモジュールが動作する必要がある各モジュールに適切な「要求」ステートメントを含めることができるため、各モジュールにモジュールの依存関係が定義されていることです。

+0

ありがとうございます - 私の質問はあまり働いて理解しているrequireJSではありません。私は質問を編集し、より具体的にしようとしました。 – ddennis

7

TypeScriptプログラムをブラウザで実行するためにRequireJSを使用する唯一の理由は、何百ものモジュールがある場合ですが、そのページにはアクションを実行するのに2〜3つしか必要でないことがあります。私たちはここでは、軽量アプリケーションやWebページのための追加のファンキーなものではなく、深刻な大きなプログラムを話している。

非常に大きなアプリケーションにRequireJSを使用すると、必要なスクリプトだけを読み込むことができます。

例として、Microsoft OfficeをTypeScriptプログラムとして記述したとします。RequireJSを使用して必要なものだけを読み込むことができます。最初は、ファイルの探索に必要なものをロードしてから、ファイルが選択されると、そのモジュール(おそらくはWord)がその依存関係でロードされます。これは、あなたがいくつかの小さなチャンクでプログラムのわずか10%をダウンロードしたことを意味するかもしれません。

モジュールローダー

活字体は、独自のモジュールローダを持っていません。 TypeScriptをJavaScriptにコンパイルし、モジュールのインポート文をCommonJSまたはAMDスタイルのコードに変換します。非同期モジュール定義(AMD)は、RequireJSによって使用されるモジュール形式です。 CommonJSモジュールはNodeJSによって使用されます。 TypeScriptまたはJavaScriptを使用しているかどうかに関わらず、これらのモジュールローダーに頼る必要があります。 TypeScript Language Specificationのセクション10.4あたりのいずれかとrequiredefine文に

import myModule = module('mymodule'); 

活字体は単純に、この変換されます。

+0

私はあなたの答えをありがとう - ありがとう。 requireJsが私たちの解決に役立っているという問題を知っています。それが、単純なjのrequireJsのようなモジュールローダーを使用する理由です。しかし、私はあなたが私の質問に答えたとは思わない、私のモジュールを管理するためにrequireJsを使用し、私が理解しているように実行時に読み込むことができるtypescript内部モジュールに固執するだけではない。 – ddennis

+0

@ddennisこれについてのメモを追加しました。基本的に、TypeScriptにはモジュールローダーが組み込まれていませんが、CommonJSとAMDモジュールローダーの両方をサポートしています。 – Fenton

+0

@Sohnee複数のメニューを持つアプリケーションでどのようにrequirejsが動作するか、各メニューには独自のtsファイルと依存関係があり、メニューをクリックすると必要なファイルのみがロードされます。私が学ぶことができるリソースはありますか?あなたがあなたの答えで述べた同じ例。私はrequirejsについて読んだことがありますが、デモのための小さなアプリの例がありました。 –

関連する問題