15

これは、Typescript で requirejs が必要な理由とタイミングに関する一般的な質問です。以前にrequireJsでいくつかの作業を行ったことがあり、デプロイする前に常にr.jsビルドスクリプトを使用していました. 私が理解しているように、すべての js ファイル (モジュール) をマージするビルド スクリプトは、http 要求の量を減らし、もちろんコードをモジュール化する方法を提供することです。

私の質問は次のとおりです: typescript は既にコードをモジュールに分割する簡単な方法を提供しているため、requirejs を使用してモジュールを処理する追加の手順ではなく、結果の js ファイルをマージしてみませんか? 大規模なプロジェクトに取り組んでいる場合、すべての js を一度にロードするべきではないことは理解していますが、何らかの方法でモジュールをバンドルしていると思います。

編集:より具体的には: モジュールの管理にrequireJsを使用し、typescript内部モジュールに固執するだけでなく、実行時にもロードできることを理解した理由。amd と requirejs に基づく内部モジュールと外部モジュール。

4

3 に答える 3

7

ブラウザーで TypeScript プログラムを実行するために RequireJS を使用することを選択する唯一の理由は、何百ものモジュールがあり、ページがアクションを実行するのに 2 つまたは 3 つしか必要ない場合です。ここでは、軽量のアプリや Web ページ用のファンキーな追加機能ではなく、本格的な大規模プログラムについて説明します。

非常に大きなアプリケーションに RequireJS を使用するということは、念のためすべてではなく、本当に必要なスクリプトのみをロードすることを意味します。

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

モジュールローダー

TypeScript には独自のモジュール ローダーがありません。TypeScript を JavaScript にコンパイルし、モジュールのインポート ステートメントを CommonJS または AMD スタイルのコードに変換します。Asynchronous Module Definition (AMD) は、RequireJS で使用されるモジュール形式です。CommonJS モジュールは NodeJS によって使用されます。TypeScript を使用しているか JavaScript を使用しているかにかかわらず、これらのモジュール ローダーに頼る必要があります。

TypeScript はこれを単純に変換します。

import myModule = module('mymodule');

TypeScript 言語仕様のセクション 10.4 に従って、 requireorステートメントのいずれかに。define

于 2013-06-17T11:00:15.390 に答える
2

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

于 2013-06-17T09:44:23.790 に答える