Я довольно долго читаю документацию по оптимизации, но мне кажется, что я не могу это понять. Док говорит:
Оптимизатор объединяет только модули, указанные в массивах строковых литералов, которые передаются на верхний уровень, требуют и определяют вызовы или требовать ('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
в этом экземпляре будет загружен, и он в конечном итоге выполнит обратный вызов, но сама структура здесь, кажется, не позволяет оптимизатору выполнять свою работу.
Вопрос:
-
Если бы я просто перечислил все модули в "Верхнем требовании", то r.js также включит + ссылку на все вызовы top
require
иdefine
из вложенных и вложенных вложенных модулей в main- файл приложения? -
Они упоминают опцию включения для r.js в Документах. Это имеет смысл здесь, и если да, то как правильно его вызывать?
Конечно, вы не захотите потерять возможность использования ленивых модулей позже, но для такой зависимости (ожидая DOMContentLoaded), я надеюсь, что есть способ обхода этого.