Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Замечу, что Asynchronous module definition (AMD) и CommonJS не поддерживают склеивание файлов.AMD поддерживает. Насчет CommonJS не знаю, но 90%, что подобная тулза есть.
global.scripts = {};
global.require = function(scripts, callback) {
var counter=0,
scriptLoaded = function() {
counter++;
this.script.loaded = true;
global.scripts[script.namespace] = this.script;
if (counter == scripts.length && callback) callback();
},
scriptError = function() {
counter++;
delete this.script;
head.removeChild(this);
if (counter == scripts.length && callback) callback();
}
for (var i=0; i<scripts.length; ++i) {
var path = scripts[i],
file = path.replace(/^.*[\\\/]/, ''),
namespace = file.replace(/\.[^/.]+$/, "");
if (!global.scripts[namespace]) {
var script = {"namespace":namespace,"file":file,"url":path,"element":null,"loaded":false};
script.element = document.createElement('script');
script.element.script = script;
addEvent(script.element, 'load', scriptLoaded);
addEvent(script.element, 'error', scriptError);
script.element.src = path;
head.appendChild(script.element);
}
}
}
global.html = document.documentElement || document.getElementsByTagName('html')[0];
global.head = document.head || document.getElementsByTagName('head')[0];
global.body = null;
Паттерны JavaScript модулей в Impress для node.js и браузеров