Использование оптимизатора 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
всякий раз, когда файл изменяется, что делает цикл разработки-обновления-теста только этим бит лучше.