2013-06-28 12 views
49

モジュールの場合、私はdefineの代わりにrequireを使用していたオブジェクトを返しません。今、私は別のモジュールに次のように言うならばRequireJs - Define vs Require

require(['jquery'], function($) { 
    $.fn.myPlugin = function(options) { 
     ... 
    }; 
}); 

:たとえば、私は、次のjQueryプラグイン(jquery.my-plugin.js)を持っていると言う

require(['jquery', 'jquery.my-plugin'], function($) { 
    $('#element').myPlugin(); 
}); 

私は、これは「doesnの見つけましたmyPluginが登録されていないため、動作しません。しかし、jquery.my-pluginモジュール内のdefineにrequireを変更すると、うまく動作します。

誰かがこれをやらなければならない理由を誰かが解消できると感謝します。私は先に進んで使用する前に、何かを完全に理解しています。ありがとう

+2

...あなたは世界のjQueryオブジェクトにプラグイン機能を添付し、それを使用するコードのセクションです使用する定義](http://stackoverflow.com/questions/9507606/when-to-use-require-and-when-to-use-define) – Armand

答えて

90

本来、requireを使用すると、「私はこれが欲しいですが、すべての依存関係も欲しい」と言います。したがって、以下の例ではAを必要としていますが、requireはすべての依存関係を検索し、続行する前にロードされていることを確認します。親指の

require(['a'], function(a) { 
    // b, c, d, e will be loaded 
}); 

// File A 
define(['b','c','d','e'], function() { 
    return this; 
}); 

一般的なルールは、あなたのアプリケーションで再利用されるモジュールを定義したいとあなたは、単に依存関係をロードするためにrequireを使用するときにdefineを使用しています。以下

+2

私よりもずっと良いと言った:)私を削除します。 – oooyaya

+0

ありがとうございますが、なぜファイルAにdefineの代わりにrequireを使用できないのですか?基本的には、ファイルAはb、c、d、eが必要です。 – nfplee

+51

一般的な経験則では、アプリケーションで再利用されるモジュールを定義し、依存関係をロードするために 'require'を使うときに' define'を使います。 –

2

が他の場所で依存関係として使用することができる「jquery.my・プラグイン」と呼ばれるモジュールを定義jquery.my-plugin.js内部でなければならないコードです。以下は

define(['jquery'], function($) { //jquery is a dependency to the jquery.my-plugin module 
    $.fn.myPlugin = function(options) { //adds a function to the *global* jQuery object, $ (global since jQuery does not follow AMD) 
     ... 
    }; 
}); 

[必要が使用する方法とする場合の可能性重複

require(['jquery.my-plugin'], function() { // jquery.my-plugin is loaded which attaches the plugin to the global JQuery object as shown above, then this function fires 

    //the only reason $ is visible here is because it's global. If it was a module, you would need to include it as a dependency in the above require statement 
    $('#element').myPlugin(); //the $ refers to the global object that has the plugin attached 
}); 
+1

すべては私によく見えます。うん、$オブジェクトがグローバルに定義されているので、requireステートメント内にインクルードするかどうかは任意です。そうすることで、競合するライブラリの潜在的な問題を回避できます。これは上記のdefineステートメントと一貫しています。 – nfplee

関連する問題