Когда-то давно не имел представления, как сделать включение скриптов в браузере как в ноде. Сегодня опыта немного больше. Посидев пару десятков минут, сделал. Есть более функциональные импортеры модулей, этот мини скрипт создан чисто из спортивного интереса. Может быть кому-то это покажется полезным.
Функция require принимает на себя два параметра: адрес скрипта и опциональный колбек.
Если колбек не указан, то запрос на сервер будет идти синхронно, а возвращаться будет модуль. Если не указан, то возвращается null, а аргументом коллбека будет модуль.
Пример:
var module = require('module.js'); // module теперь извлекаемый модуль
//...
или
var module;
require('module.js', function( m ){
module = m;
//...
});
Пример файла модуля:
var local = 'local';
exports.method1 = function(){
alert('method 1, local=' + local)
};
this.method2 = function(){
alert('method 2')
};
Собственно, функция require:
window.require = function require(path, callback) {
var req = new XMLHttpRequest(),
module = null,
async = !! callback,
createModule = function (text) {
return (new Function('var exports = this;' + text + '; return this;')).call({});
};
req.open('GET', path, async);
req.onreadystatechange = function () {
if (req.readyState === 4) {
if (req.status === 200) {
module = createModule(req.responseText);
callback && callback(module);
} else {
throw new Error('Module ' + path + ' not found');
}
}
};
req.send(null);
return module;
};