以下のように、モジュールが頻繁に依存するライブラリへのパスを常に定義します。
<script data-main="scripts/main" src="scripts/require.js"></script>
ファイル: scripts/main.js
require.config({
paths: {
jQuery_1_7_2: 'lib/jquery.1.7.2',
underscore: 'lib/underscore',
.....
.....
}
});
注: 以下のように、モジュール内にライブラリを含め、オブジェクトとして返す必要があります。
ファイル: lib/jquery.1.7.2.js
define([ 'lib/jquery/jquery.1.7.2.min' ], function() {
return jQuery.noConflict(true);
});
モジュラー アプローチに従わない他のライブラリについても、同じアプローチに従うことができます [AMD 仕様]
注: ライブラリ モジュールを定義する上記の手順は、shim 機能を使用することで回避できます。
ページは動的であるため、どのモジュールがロードされるかはわかりません。
複数の require() 呼び出しを呼び出して、モジュールをロードできます。requirejs はスクリプトを非同期的にロードするため、以下のアプローチによってページのパフォーマンスが損なわれることはありません。
HTML ビューでの Module-1
<html>..
<div id="module_1">
//contents of module 1
</div>
<script type="text/javascript">
require(["scripts/widgets/module_1"], function( module_1 ){
module_1.init();
})
</script>
..</html>
ファイル: scripts/widgets/module_1.js
define(["jQuery_1_7_2","underscore"], function($, _){
// Module functionality goes here
return {
init: function(){
// Module initialiser
}
}
});
モジュール 2 in-in HTML ビュー
<html>..
<div id="module_2">
//contents of module 2
</div>
<script type="text/javascript">
require(["scripts/widgets/module_2"], function( module_2 ){
module_2.init();
})
</script>
..</html>
ファイル: scripts/widgets/module_2.js
define(["jQuery_1_7_2","underscore"], function($, _){
// Module functionality goes here
return {
init: function(){
// Module initialiser
}
}
});
DOM ロード後にモジュールを初期化しても構わない場合は、controljsを使用してスクリプト タグの MIME タイプを変更できます。ページのパフォーマンスに大きな違いはないと思います。