web-dev-qa-db-ja.com

いつrequire()を使うべきで、define()を使うべきですか?

私はここ数日間requirejsで遊んでいます。 defineとrequireの違いを理解しようとしています。

Defineはモジュールの分離を可能にし、依存関係の順序付けを順守することを可能にするようです。しかし、それはそれが最初に必要とするすべてのファイルをダウンロードします。あなたがそれを必要とするときあなたが必要とするものだけをロードする間、必要とします。

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

309
skinnybrit51

defineを使用してモジュールをrequire.jsに登録し、それを他のモジュール定義またはrequireステートメントに依存させることができます。 requireを使用すると、require.jsでロードできるモジュールまたはJavaScriptファイルを「単に」ロード/使用できます。例としては ドキュメント を見てください。

私の経験則:

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

  • 必須:あなたがものをロードして使いたいだけなら.

324
wischan

Require.jsから ソースコード (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つの必須パラメータ(ファクトリメソッド)を受け取ります。

ファクトリメソッドの戻り値MUSTは、モジュールの実装を返します( Module Pattern と同じ方法で)。 ).

require()関数は新しいモジュールの実装を返す必要はありません。

define()を使用して、のように入力しています。合格していますが、その前に、これらの依存関係がロードされていることを確認してください

require()を使って、のように言っています。 "私が渡す関数には、以下の依存関係があります。実行しています "

require()関数は、モジュールが定義されていることを確認するために定義済みのモジュールを使用する場所ですが、新しいモジュールは定義していません。

326
Robert

モジュール定義を容易にするための "define"メソッドと、依存関係のロードを処理するための "require"メソッド

defineは、次のシグネチャを使用して、提案に基づいて名前付きモジュールまたは名前なしモジュールを定義するために使用されます。

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

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

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

2
refactor

require()とdefine()はどちらも依存関係のロードに使用されます。これら2つの方法には大きな違いがあります。

その非常に単純な人たち

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

2
Baalu

一般的なルール:

  1. 再利用するモジュールを定義する場合、defineを使用します

  2. Requireを使用して、単に依存関係をロードします

    //sample1.js file : module definition 
    define(function() {
          var sample1 = {};
          //do your stuff
         return sample1;
     });
    
    //sample2.js file : module definition and also has a dependency on jQuery and sample1.js
    define(['jquery', 'sample1'], function($,sample1) {
        var sample2 = {
            getSample1:sample1.getSomeData();
        };
        var selectSomeElement = $('#someElementId');
        //do your stuff....
        return sample2;
    });
    
    //calling in any file (mainly in entry file)
    require(['sample2'], function(sample2) {
        // sample1 will be loaded also
    });
    

これがお役に立てば幸いです。

0
Humayoun_Kabir