私はここ数日間requirejsをいじっています。定義と要求の違いを理解しようとしています。
defineはモジュールの分離を可能にし、依存関係の順序を守ることができるようです。しかし、最初から必要なすべてのファイルをダウンロードします。必要なときに必要なものだけをロードする必要があります。
これら2つを一緒に使用できますか?また、それぞれをどのような目的で使用する必要がありますか?
私はここ数日間requirejsをいじっています。定義と要求の違いを理解しようとしています。
defineはモジュールの分離を可能にし、依存関係の順序を守ることができるようです。しかし、最初から必要なすべてのファイルをダウンロードします。必要なときに必要なものだけをロードする必要があります。
これら2つを一緒に使用できますか?また、それぞれをどのような目的で使用する必要がありますか?
回答:
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()
あなたが定義されたモジュールを使用します。ここで、関数は、モジュールが定義されていることを確認するためには、ですが、そこに新しいモジュールを定義していません。
define()
)require([])
を要求する呼び出し、またはそれに依存する何かが行われるまで実行しません。」github.com/jrburke/requirejs/wiki/...
モジュール定義を容易にするための「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/を参照してください。
一般的なルール:
再利用するモジュールを定義したい場合は、defineを使用します
依存関係を単にロードするために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
});
これがお役に立てば幸いです。