Использование оптимизатора RequireJS с одним файлом сборки для получения нескольких выходных данных - PullRequest
10 голосов
/ 19 марта 2012

В настоящее время я работаю над большим проектом 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 конфигурации сборки, похоже, не минимизирует каждый модуль.

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

Ответы [ 2 ]

1 голос
/ 05 марта 2013

У меня были проблемы с тем, чтобы Require.JS делал все точно так, как мне было нужно.

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

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

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

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

0 голосов
/ 16 декабря 2013

Я точно не помню, что было не так в то время, когда я спрашивал об этом (возможно, это была ошибка текущей версии 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 и многие другие, но в основном это была структура, которую я искал.

...