Автоматически перечислять зависимости require.js с асинхронной загрузкой для оптимизации r.js

Я попытаюсь упростить свою проблему. У меня есть основное приложение (одностраничное приложение), для которого требуются файлы javascript на основе собственного файла конфигурации.

Файл конфигурации json выглядит так (этот файл конфигурации не связан с requirejs, это собственный файл конфигурации приложения):

"modules": [
 {
 "categories": "categories/main"
 }
]

Основное приложение в основном загружает свой файл конфигурации json и требует модулей во время выполнения, что-то вроде:

function loadModule(id, modulePath) {
 require([modulePath], function(module) {
 // modulePath is categories/main
 });
}

У меня есть конфигурация AMD, которая выглядит так:

require.config({
 'paths': {
 'categories':'js/app/modules/categories',

Модуль выглядит следующим образом:

define('categories/main', [
 'categories/data/navigation'
], function (
 navigation
) {
 'use strict';
 var CategoriesModule = function() {
 };
 CategoriesModule.id = 'categories';
 return CategoriesModule;
});

Таким образом, все работает отлично с не-уменьшенной версией.

Обратите внимание, что даже если я динамически загружаю модули в своем приложении, я все же хочу, чтобы модули были проинструктированы внутри одного только миниатюрного файла, который у меня есть в моем приложении. Я не хочу, чтобы HTTP-запрос во время выполнения загружал модуль.

Для этого я включил модуль в мою сборку оптимизации:

require.config({
 include: [
 'app/modules/categories/main'

Это тоже очень хорошо, но вот что я пытаюсь сделать.

Если вы посмотрите на модуль, для этого потребуется другой файл: 'categories/data/navigation'.

И этот файл не минимизируется, потому что, очевидно, r.js не может отслеживать зависимости файлов, загружаемых во время выполнения.

Я ожидаю, что r.js будет следить за зависимостями того, что я "включил" в эту конфигурацию конфигурации оптимизации.

Итак, чтобы решить эту проблему, мне нужно будет сделать следующее в моей конфигурации конфигурации оптимизации:

require.config({
 include: [
 'app/modules/categories/main',
 'app/modules/categories/data/navigation'

Другими словами, список файлов, которые использует модуль, чего я пытаюсь избежать.

Я думал, что findNestedDependencies решит проблему, но это не так. Вот моя конфигурация r.js для информации:

options: {
 paths: {
 'main': 'js/main'
 },
 logLevel: 0,
 baseUrl: 'public',
 mainConfigFile: ['build/optimization/require.config.js', 'public/js/app/config/amd.js'],
 generateSourceMaps: false,
 preserveLicenseComments: true,
 name: 'main',
 out: 'public/js/main.min.js',
 removeCombined: true,
 findNestedDependencies: true,
 uglify: {
 beautify: false,
 mangle: false
 }
}

Это приложение довольно большое, и для меня важно ограничить требуемую работу, необходимую при создании модуля, модуль "plug and play" - это то, что я получаю после.

Список всех файлов, которые модуль использует для мини-программирования, - это то, что я хотел бы найти для решения.

Какой-нибудь намек? Любая идея?

Почему r.js не может следить за зависимостями моего модуля, когда я включаю основной файл модуля в конфигурацию оптимизации?

Любая помощь была оценена.

Приветствия.

1 ответ

Я отвечу на свой вопрос. r.js не смог следить за зависимостями модулей, потому что я включил полный путь модуля в конфигурацию оптимизации построения. Используя ярлык пути, который также является определенным именем модуля, r.js затем может следить за зависимостями.

Я не уверен, почему, но я думаю, это, вероятно, имеет смысл.

Скорее, используя:

require.config({
include: [
 'app/modules/categories/main'

Включение должно быть:

require.config({
 include: [
 'categories/main'

Вероятно, из-за требуемого пути конфигурации:

require.config({
 'paths': {
 'categories':'js/app/modules/categories'

Надеюсь, что это поможет кому-то с такой же проблемой!

licensed under cc by-sa 3.0 with attribution.