Я работаю над мобильным веб-сайтом (это не одностраничное приложение), который занимает очень мало места в JS (меньше 10 КБ и сжато).Здесь нет библиотек или внешних зависимостей, весь код написан на собственном языке.Он логически разделен на несколько файлов, которые объединяются перед развертыванием, чтобы уменьшить количество HTTP-запросов.В файлах нет явного пространства имен.То есть они выглядят примерно так:
// crossbrowser.js
function getScrollOffset() {
// implementation
}
function ...
Это не идеально, нет явного разрешения зависимостей, и область действия может быть легко загрязнена внутри функций.Для проверки этого не выполняется обработка (lint или компилятор).В качестве первого шага я подумал, что реализация явной системы модулей может защитить от этого и сделать код лучше.
Чтение в формат модуля CommonJS и загрузчиков, таких как RequireJS, Lab.js и других, насколько я понялпри использовании модулей на стороне браузера все они ожидают загрузки их через XHR.Я не хочу этого, я хочу сохранить единый формат сценария, который содержит все модули.Мой файл выглядел бы примерно так:
var define = function () { /* ... */ };
var require = function () { /* ... */ };
define("crossbrowser", function (require, exports, module) {
exports.getScrollOffset = function() {
//
};
// etc.
});
define("foo", function (require, exports, module) {
var crossbrowser = require('crossbrowser');
exports.getNewOffset = function () {
var offset = crossbrowser.getScrollOffset();
// do something
return offset;
}
});
window.addEventListener('DOMContentLoaded', function () {
// really dumb example, but I hope it gets the point across
var crossbrowser = require('crossbrowser'),
foo = require('foo');
crossbrowser.scrollTo(foo.getNewOffset());
});
Вопрос в том, работает ли какой-либо из загрузчиков таким образом, или мне нужно написать собственную реализацию define
и require
?