0

Webサイトの構築を開始し、機能を実装するために必要なスクリプトを選択的にロードするためにRequire.jsを使用しました。私が経験しているのは:

  • 一部のコードが「require」を使用して依存関係をロードする前に、「main」スクリプトの実行(またはダウンロード)が完了していません。これが意味するのは、require.js構成が実行されておらず、スクリプトの場所を認識していないということです。
  • 私のコードがそれを使用する必要があるときまでにrequire.js構成が実行されていないため、「shim」メカニズムは初期化されておらず、使用できません。

一般的なエラーのページと、私が自分の問題を解決しようとしているときにオンラインで読んでいるように見える多くの問題は、これが仕事に適したツールではないことを示唆しているようです。

これは、シングルページアプリケーションまたはnode.jsアプリケーションには役立つようですが、require.jsが初期化される前に他のスクリプトを実行できる従来のサイトには役立ちません。

require.jsがその仕事に適したツールではない場合、この仕事に適したツールはありますか?もしそうなら、何ですか?

4

1 に答える 1

1

require.jsスクリプトを非同期で(を使用して)ロードしていますasync='async'か?requirejsを同期的にロードする必要があります。ロードされると、main.jsファイルなどのスクリプトが非同期でロードされます。それらはすべて順不同でロードされる可能性がありますが、コードは実際には正しい順序で実行されます(宣言された依存関係を尊重します)。

したがって、ページテンプレートには、次のようになります。

<script src="/Scripts/require.js" type="text/javascript" data-main="main.js"></script>

これによりRequireJSが読み込まれ、読み込まれるとmain.js非同期で読み込みが開始されます。通常main.js、モジュールは定義されません。他のファイルで定義されたモジュールを使用するだけです。これらの依存関係は、require()呼び出しにリストされています。

require(["moduleA", "moduleB"], function(A, B){
  // Do something with A and B
  A.someFunction();
  B.someOtherFunction();
});

ファイルmoduleA.jsmoduleB.jsその内容を。内にラップする必要がありますdefine()。In moduleA.js(モジュールCに依存):

define(["moduleC"], function () {
  // Build up an A
  var A = ....;

  return A;
});

defineモジュールを呼び出しでラップしているのではないかと思います。そうしないと、発生しているアウトオブオーダー実行を説明できる可能性があります。

RequireJSは、単一ページのサイトだけでなく、従来のサイトでも完全に有効なツールです。

于 2012-08-01T04:05:13.497 に答える