2012-02-29 12 views
294

私は最後の数日間requirejsで遊んでいます。定義と必要の違いを理解しようとしています。require()とdefine()をいつ使うべきですか?

定義すると、モジュールの分離が可能になり、依存関係の順序付けが遵守されるように見えます。しかし、それは、それが始まる必要があるすべてのファイルをダウンロードします。あなたが必要なときに必要なものだけを必要としながら、それを必要とします。

これらの2つを一緒に使用することはできますか?どのような目的で使用する必要がありますか?

答えて

314

defineでrequire.jsにモジュールを登録すると、他のモジュール定義やrequire文に依存することができます。 requireでは、require.jsでロードできるモジュールまたはjavascriptファイルをロード/使用するだけです。例について は、親指のdocumentation

マイルールを見てみましょう:

  • を定義します。あなたはあなたのアプリケーションのモジュールの他の部分を宣言したい場合に依存します。

  • 必須:必要なものだけを読み込んで使用したい場合。

319

require.jsからsource code(ライン1902):

/** 
* The function that handles definitions of modules. Differs from 
* require() in that a string for the module should be the first argument, 
* and the function to execute after dependencies are loaded should 
* return a value to define the module corresponding to the first argument's 
* name. 
*/ 

define()関数は2つのオプションのパラメータ(モジュールIDおよび必要なモジュールの配列を表す文字列)を受け付けると1つの必須パラメータ(ファクトリメソッド)。

は、(Module Patternと同じ方法で)モジュールの実装を返します。

require()関数は、新しいモジュールの実装を返す必要はありません。あなたは「パラメータとして私は渡してい関数を実行し、私が渡したが、前に、これらの依存関係がロードされていることを確認していますIDに戻り、何でも割り当てる」をのようなものを求めているdefine()を使用して

。あなたは「私は次の依存関係を持って渡す機能は、これらの依存関係は、それを実行する前にロードされていることを確認し、」のようなものを言っているのrequire()を使用して

。あなたが定義したモジュールを使用する場所

require()機能はモジュールが定義されていることを確認するためには、ですが、そこに新しいモジュールを定義していません。

+1

requireが定義されたモジュール内で使用されるのか、その外側で使用されるのかに違いはありますか?モジュール内で使用されている場合は、requireを使用するのではなく、モジュール定義に要件を設定するだけです。 – Petri

+0

この回答が私がここで読んだ内容と大きく異なる理由http://requirejs.org/docs/api.html#deffunc ?? –

+1

@Petriは、モジュールを非同期にロードするRequireJSのバージョン2の動作を見ているようです。 requireJS 2.0は要求した 'require([])'呼び出しやそれに依存するものがあるまで、モジュールのファクトリ関数( 'define()'に渡される関数)を実行しません。 https://github.com/jrburke/requirejs/wiki/Upgrading-to-RequireJS-2.0#delayed – alxndr

1

モジュール定義 を容易にする方法「を定義」と 依存ローディング

を処理する方法を「必要とする」は、以下のシグネチャを使用して、提案に基づいて、名前付きまたは名前のモジュールを定義するために使用される定義:

define(
module_id /*optional*/, 
[dependencies] /*optional*/, 
definition function /*function for instantiating the module or object*/ 
); 

requireは、通常、依存関係を動的に取得したい場合は、トップレベルのJavaScriptファイルまたはモジュール内のコードをロードするために使用されます。

詳細については、https://addyosmani.com/writing-modular-js/を参照してください。

1

依存関係を読み込むためにrequire()とdefine()の両方が使用されています。これら2つのメソッドには大きな違いがあります。

その非常にシンプルGuysは

は()を必要とします。方法は、即時機能を実行するために使用されます。 define():メソッドは、複数の場所で使用するためのモジュールを定義するために使用されます(再利用)。

関連する問題