Использование оптимизатора RequireJS с одним файлом сборки для создания нескольких выходов

В настоящее время я работаю над большим проектом JavaScript, и я использую RequireJS для наложения некоторой структуры.

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

Пример структуры папок:

src/core/main.js
src/core/util/HashMap.js (
src/package1/main.js
src/package1/views/view1.js

Где файлы main.js являются точками входа для модулей.

Я хотел бы настроить мою сборку таким образом, чтобы после завершения сборки у меня были бы следующие два выхода:

core.min.js
package1.min.js

Однако я не могу заставить это работать. Использование свойства modules в конфигурации сборки, похоже, не минимизирует каждый модуль.

Может ли кто-нибудь пролить свет на то, что я делаю неправильно здесь?

Ответ 1

Я не помню точно, что было не так в то время, когда я спрашивал об этом (возможно, это была ошибка текущей версии RequireJS, которую я использовал в то время), но такая настройка легко достижима, используя (как Я сказал в своем вопросе) раздел modules. Просто объявите свои модули следующим образом:

optimize:"uglify",
dir: 'out',
modules: [
    {
        name: "src/core/Main"
    },
    {
        name: "src/package1/Main"
    }
],
...

Это приведет к следующей структуре в out:

out
|--core
:  |--Main.js
|--package1
:  |--Main.js

Есть опции для переименования выходных файлов, сглаживания выходной папки, исключения всех пакетов core из package1 и многих других, но в основном это была структура, которую я искал.

Ответ 2

Мне не удалось заставить Require.JS делать все точно так, как мне было нужно все само по себе.

В настоящее время я использую Grunt. У меня есть Require.JS плагин для Grunt, сконфигурированный для объединения дюжины файлов модулей только в 2 файла. Я использую modules, empty: и exclude здесь и там, чтобы помочь в достижении этого. Require.JS по-прежнему является лучшим способом комбинирования модулей на основе их зависимостей.

Затем я использую плагин Uglify для Grunt, чтобы отдельно минимизировать вывод.

Хотя это может не помочь в вашем случае использования, я также использую Grunt concat plugin, чтобы помочь получить мой вывод так, как я как это.

Это все в Gruntfile.js, и поэтому все это происходит автоматически с grunt watch всякий раз, когда файл изменяется, что делает цикл разработки-обновления-теста только этим бит лучше.