Оптимизация / сборка модулей в параллельных каталогах с использованием одного и того же файла конфигурации в RequireJS - PullRequest
2 голосов
/ 24 января 2012

У меня такое ощущение, что название просто не может быть пояснительным:)

Настройка

Предположим, у меня есть следующая структура:

enter image description here

где app.js файлы - это основные модули начальной загрузки / ввода для приложений, которые выглядят следующим образом:

app01

require.config({});

require([
    'app/component1.js'
], 
function(component){
    // do something with component1
});

app02

require.config({});

require([
    'app/component2.js'
], 
function(component){
    // do something with component2
});

, которые оба работают с соответствующими index.html файлами.

У меня есть файл конфигурации сборки RequireJS (допустим правильное размещение, связанное с путями) для app01 :

({
    appDir: 'apps/app01',
    baseUrl: '.',
    dir: 'built_apps/app01',
    optimize: 'closure',
    paths: {
    },

    modules: [
        {
            name: 'app'
        }
    ]
})

, который работает просто отлично. Аналогичный файл (замена app01 на app02) отлично работает для app02 .

Проблема / цель

Теперь я хочу иметь возможность запускать инструмент сборки RequireJS (используя Google Closure с Rhino под Ant, но в данном случае это не имеет значения) для приложений app01 и app02 используя тот же файл конфигурации сборки и, предпочтительно, без фактического перечисления всех приложений по имени (поскольку число и имена могут изменяться со временем).

В основном я ожидаю (или, скорее, надеюсь) иметь что-то вроде этого:

({
    appDir: 'apps',
    baseUrl: '.',
    dir: 'built_apps',
    optimize: 'closure',
    paths: {

    },

    modules: [
        {
            name: 'app*/app' // notice the wildcard
        }
    ]
})

, который будет работать в каталоге built_apps, найти все приложения в приложении * / app и оптимизировать каждое из них.

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

Есть ли способ сделать что-то подобное с RequireJS?

1 Ответ

2 голосов
/ 21 апреля 2012

Для RequireJS нет встроенной конфигурации с подстановочными знаками.Так или иначе, вам понадобится код, чтобы сделать это.Я отмечу, что то, что вы просите здесь, сводится к переводу подстановочного знака в какую-то неявную итерацию для объектов модуля, сродни тому, что mustache.js предоставляет для своих шаблонов.IMO, это довольно хрупкий и ограниченный подход в этом контексте.

Вместо этого я рекомендую генерировать массив modules программно в JavaScript прямо в конфигурации сборки.Напомним, конфигурация сборки - это JavaScript, а не просто структура данных JSON.Это дает вам сложные возможности написания сценариев.

Я выполнил этот вид сценариев в конфигурации сборки для requirejs-rails gem .Вот пример примера , который показывает, что r.js увидит во время сборки.

...