bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

Гибкая сборка при помощи enb #608

Open pavelpower opened 9 years ago

pavelpower commented 9 years ago

ENB сборка ограничивает нас своими правилами в отношении нод.

Допустим, у меня есть матрица свойств для сборки, от которой будут зависить какие слои переопределения необходимо подключить к сборке. Пример матрицы:

  1. Заказчик - слои с именем заказчика имеют блоки для логики заточенной под заказчика, а так же и ряд тем
  2. Устройство - не каждое устройство должно тянуть к себе код от другого.
  3. Разрешение - не все приложения делаются резиновыми, по большей части в нашей работе приложение собирается под конкретное разрашение.
  4. Тема - это свойство очевидно многим, у нас тема определяется как набором css так и возможными изменениями поведения в js

Теперь рассмотрим ситуацию.

Как нужно сформировать бандл, чтобы учесть все эти параметры?

enb make -m dev ./bundles/client/samsung/1280x720/orange - учли все.

должны получить структуру:

bundles/client/
bundles/client/samsung
bundles/client/samsung/1280x720/
bundles/client/samsung/1280x720/orange
bundles/client/samsung/1280x720/orange/orange.css
bundles/client/samsung/1280x720/orange/orange.js
bundles/client/samsung/1280x720/1280x720.css
bundles/client/samsung/1280x720/1280x720.js
bundles/client/samsung/samsung.css
bundles/client/samsung/samsung.js
bundles/client/samsung/samsung.html
bundles/client/client.html

Но посмотрите на структуру вариаций!

И сколько мне нужно задать bemdecl.js файлов?

Когда очевидно было бы получить все зависимости только из одного.

Ах было бы прекрасно, коли была бы возможность сделать так:

enb make -m dev ./bundles/client/samsung?resolution=1280x720&theme=orange&some=1&some=2

Тогда появляется настройка сборки в очень тонких материях, и rколичество ветвлений сократилось бы на много!

bundles/client/
bundles/client/samsung
bundles/client/samsung/samsung-1280x720-orange.css
bundles/client/samsung/samsung-1280x720-orange.js
bundles/client/samsung/samsung.css
bundles/client/samsung/samsung.js
bundles/client/samsung/samsung.html
bundles/client/client.html

Конечно, в сборке ноды можно получить и параметры:

config.nodes('bundles/**/**', function (nodeConfig) {
    console.log(nodeConfig.query);
});

/// { 'resolution': '1280x720',  'theme': 'orange', some: [1,2] }

Не мне же одному уже приходит эта мысль? Наверняка уже кто-то задумывался об этом? Ведь , это так упрощает жизнь!

tadatuta commented 9 years ago

Используй переменные окружения.

pavelpower commented 9 years ago

@tadatuta они помогут, но не с enb server!

pavelpower commented 9 years ago

@tadatuta в принципе задача решается путем задания конкретных таргетов, как

            nodeConfig.addTargets([
                'index.html',
                'index.js',
                'index.css',
                'index-1280x720.js',
                'index-1280x720.css',
                'index-1280x720-orange.js',
                'index-1280x720-orange.css'
            ]);

Но, опять же, если enb make тут возможен, то для сборки конкретной технологии с параметрами через query строку для enb server как-то не выходит.

tadatuta commented 9 years ago

Возьми express, подключи к нему ENB-мидлварь и напиши любой роутинг, какой тебе нравится.