Подтвердить что ты не робот

RequireJS optimizer не включает вложенные вызовы

Я довольно долго читаю документацию по оптимизации, но мне кажется, что я не могу это понять. Док говорит:

Оптимизатор объединяет только модули, указанные в массивах строковых литералов, которые передаются на верхний уровень, требуют и определяют вызовы или требовать ('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), я надеюсь, что есть способ обхода этого.

4b9b3361

Ответ 1

По умолчанию RequireJS не проверяет вложенные вызовы, поскольку предполагает, что они предназначены для загрузки зависимостей во время выполнения. Вы переопределите это, установив

findNestedDependencies: true

в вашей конфигурации оптимизации. Надеюсь, что это поможет.