このように、require.js を使用してモジュール ツリーを構築できます。
// in main.js
require.config({/*...*/});
require(
['app'],
function (app) {
// build up a globally accessible module tree
window.app = app;
var foo = window.app.moduleName.init(); // returns "foo"
}
);
// in app.js
define(
['moduleName'],
function(moduleName){
return {
moduleName: moduleName;
}
}
);
// in moduleName.js
define(function(){
// private property
var someProp = "foo";
return {
// public method
init: function () {
return someProp;
}
}
});
ただし、require.js を使用すると、このようなグローバル モジュール ツリーがなくてもアプリを構築できます。たとえ簡単に構築できたとしてもです。それらを要求するだけで、モジュールのすべての部分に個別にアクセスできます。define/require コールバックで返すものは何でも、require.js によって参照として保存されます。それは知っておくべき重要なことです。そのため、アプリケーションにスクリプトを 2 回含めて、同じオブジェクトまたはインスタンスを持つことができます。たとえば、このようなモジュールを含める場合
// in SomeClass.js
define(function () {
function SomeClass() {
this.myValue = true;
}
return new SomeClass();
});
// app.js
define(
['SomeClass', 'someComponent'],
function (SomeClass, someComponent) {
return {
init: function () {
SomeClass.myValue = false;
someComponent.returnClassValue(); // logs false
}
};
}
);
// someComponent.js
define(
['SomeClass'],
function (SomeClass) {
return {
returnClassValue: function () {
console.log(SomeClass.myValue); // false
}
};
}
);
SomeClass.myValue の値は、モジュールを含むすべてで同じになります...