Я довольно долго читаю документацию по оптимизатору, но, кажется, не могу понять. Док говорит:
Оптимизатор будет комбинировать только те модули, которые указаны в массивах строковых литералов, которые передаются в вызовы require и define верхнего уровня, или вызовы строковых литералов require('name') в упрощенной оболочке CommonJS. Таким образом, он не найдет модули, загружаемые через имя переменной:
ОК, пока все хорошо. В основном это означает, что r.js не будет включать и сканировать вложенные зависимости. Теперь давайте предположим, что у нас есть файл «основного приложения», который выглядит следующим образом:
require([ 'es5shim', 'tools' ], function() {
console.log('fictive app entry point');
require([ 'domready!' ], function( doc ) {
console.log('domReady, loading GUI modules...');
require([ 'GUI/window', 'GUI/header', 'GUI/content' ]);
});
});
Думаю, здесь проблема становится довольно очевидной. r.js (оптимизатор) создает этот файл, связывая с ним только es5shim.js
и tools.js
. Есть ли хороший способ/обходной путь, чтобы сообщить этому оптимизатору, что он также должен связать файлы window.js
, header.js
и content.js
в этом примере?
Конечно, плагин domReady
в этом случае будет загружен и в конечном итоге выполнит обратный вызов, но сама структура здесь, похоже, не позволяет оптимизатору выполнять свою работу.
Вопрос:
Если бы я просто перечислил все модули в "Top require call", r.js также включил бы+связал бы все верхние вызовы
require
иdefine
из вложенных и вложенно-вложенных модулей в main- файл приложения ?Они упоминают параметр include для r.js в Документах. Есть ли здесь смысл, и если да, то как его правильно вызвать?
Конечно, вы не хотите потерять возможность ленивой загрузки модулей позже, но для такого рода зависимости (ожидание DOMContentLoaded) я надеюсь, что есть способ обойти это.