Мы любим RequireJS и AMD во время разработки, где мы можем редактировать модуль, удалять перезагрузку в нашем браузере и сразу видеть результат. Но когда пришло время объединить наши модули в один файл для развертывания производства, по-видимому, должен присутствовать еще один загрузчик AMD, независимо от того, является ли этот загрузчик самим RequireJS или его меньшим партнером "миндалем", как описано здесь:
http://requirejs.org/docs/faq-optimization.html#wrap
Моя путаница: зачем вообще нужен загрузчик? Если у вас нет необычных обстоятельств, из-за которых вам нужно делать вызовы require()
внутри ваших модулей, похоже, что ряд модулей AMD может быть объединен без присутствия загрузчика вообще. Простейшим возможным примером может быть пара модулей, таких как:
ModA.js:
define([], function() {
return {a: 1};
});
ModB.js:
define(['ModA'], function(A) {
return {b : 2};
});
Учитывая эти два модуля, кажется, что конкатенатор может просто создать следующий текст и не нагружать производственный сервер или браузер дополнительной полосой пропускания или вычислениями, требуемыми либо RequireJS, либо Almond.
Я представляю себе конкатенатор, который производит (и я использую шеврон-кавычки ",", чтобы показать, где были вставлены фрагменты из двух модулей выше):
(function() {
var ModA = «function() {
return {a: 1};
}»();
var ModB = «function(A) {
return {b : 2};
}»(ModA);
return ModB;
})();
Это, насколько я вижу, правильно воспроизведет семантику AMD с минимальным посторонним клеем JavaScript. Есть ли такой конкатенатор? Если бы не я, я был бы дураком, думая, что я должен написать один - есть ли действительно очень мало базовых кодов, которые состоят из простых и чистых модулей, написанных с помощью define()
, и которые больше не нуждаются в дальнейших вызовах require()
внутри, которые начинаются позже асинхронными выборки кода?