require()をいつ使用し、いつdefine()を使用する必要がありますか?


316

私はここ数日間requirejsをいじっています。定義と要求の違いを理解しようとしています。

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

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

回答:


331

ではdefineもしあなたが、他のモジュール定義に依存する、またはステートメントを必要とすることができるというrequire.jsでモジュールを登録します。ではrequire、あなた「だけ」ロード/ require.jsによってロード可能なモジュールまたはJavaScriptファイルを使用します。例については、ドキュメントを見てください

私の経験則:

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

  • 必須:ものをロードして使用したいだけの場合。


331

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つの必須パラメーター(ファクトリーメソッド)を受け入れます。

ファクトリメソッドの戻り値は、しなければならない(と同じように、あなたのモジュールの実装を返すモジュールのパターンはありません)。

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

define()あなたが使用しているのは、「パラメーターとして渡している関数を実行し、渡したIDに戻り値を割り当てますが、前に、これらの依存関係が読み込まれていることを確認する」などです。

「私が渡す関数には次の依存関係があります実行する前にこれらの依存関係がロードされていることを確認してください」のrequire()ようなものを使用しています。

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


2
requireがdefine'dモジュール内で使用されるか、それ以外で使用されるかに関して何か違いはありますか?モジュール内で使用する場合、requireを使用するのではなく、モジュール定義で要件を設定しないのはなぜですか?
ペトリ2014年

なぜこの答えは、私がここで読んだrequirejs.org/docs/api.html#deffuncとそれほど違うのですか?
James Lin

2
@Petri、非同期でモジュールを読み込むというRequireJSのバージョン2の動作を見ているようです。「RequireJS 2.0は、モジュールのファクトリー関数(に渡される関数define()require([])を要求する呼び出し、またはそれに依存する何かが行われるまで実行しません。」github.com/jrburke/requirejs/wiki/...
alxndr

2

モジュール定義を容易にするための「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

一般的なルール:

  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
    });
    

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


1

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

その非常にシンプルな男

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.