私たちは開発中に RequireJS と AMD を愛用しています。モジュールを編集し、ブラウザーでリロードを押して、すぐに結果を確認できます。しかし、本番環境でのデプロイのためにモジュールを 1 つのファイルに連結するときが来たら、AMD ローダーがまだ存在している必要があるようです。そのローダーが RequireJS 自体であろうと、その小さなパートナーである「アーモンド」であろうと、ここで説明されています。
http://requirejs.org/docs/faq-optimization.html#wrap
私の混乱は次のとおりです。なぜローダーが必要なのですか? require()
モジュール内で呼び出しを行う必要がある非常に異常な状況でない限り、一連の AMD モジュールは、ローダーがまったく存在しなくても連結できるように見えます。最も単純な例は、次のようなモジュールのペアです。
ModA.js:
define([], function() {
return {a: 1};
});
ModB.js:
define(['ModA'], function(A) {
return {b : 2};
});
これら 2 つのモジュールを考えると、連結子は単純に次のテキストを生成でき、RequireJS または Almond が必要とする追加の帯域幅または計算で運用サーバーまたはブラウザーに負担をかけないように思われます。
生成する連結子を想像します (そして、上記の 2 つのモジュールからのスニペットが挿入された場所を示すために山形引用符 «,» を使用しています):
(function() {
var ModA = «function() {
return {a: 1};
}»();
var ModB = «function(A) {
return {b : 2};
}»(ModA);
return ModB;
})();
これは、私が見る限り、AMD のセマンティクスを正しく再現し、不要なグルー JavaScript を最小限に抑えます。そのような連結子はありますか? もしそうでなければ、私がそれを書くべきだと考えるのはばかです — で書かれたシンプルでクリーンなモジュールで構成され、後でコードの非同期フェッチを開始する内部でのdefine()
さらなる呼び出しをまったく必要としないコードベースは本当にほとんどないのでしょうか?require()