Как вы организуете модули в своих проектах? В ангуляре я увидел это, вроде идея то простая, но оч удобная. Всегда теперь буду использовать эту штуку:
module = new function() {
var modules = {};
function getParamNames(func) {
return func.toString().match(/\((.*?)\)/)[1].match(/[\w$]+/g) || [];
}
function invoke(factory) {
var injections = getParamNames(factory).map(function(name) {
return module(name);
});
return factory.apply(null, injections);
}
return function(name, factory) {
if (!factory) {
var module = modules[name];
if (!module) throw 'модуль ' + name + ' не найден';
return module.instance || (module.instance = invoke(module.factory));
}
modules[name] = {
factory : factory,
instance: null
};
return this;
}
};
module('one', function() {
function say() { console.log('im one!') }
return {say: say}; //импорт
});
module('two', function() {
function say() { console.log('im two!') }
return {say: say}; //импорт
});
module('three', function(two, one) {
function init() {
one.say();
two.say();
console.log('im three, and i init!')
}
return {init: init}; //импорт
});
module('three').init(); //запускаем шайтанмашину =)
Кто не понял, модули зависимости мы запрашиваем по именам аргументов.