Сборка merged-бандла
Merged-бандл содержит в себе набор всех БЭМ-сущностей из всех бандлов платформы. Основное отличие от обычного бандла заключается в том, что BEMDECL-файл создается автоматически из BEMDECL-файлов остальных бандлов.
Как собирать бандлы, читайте в разделе Сборка бандла.
Пример сборки merged-бандла
В проекте собраны отдельные бандлы, каждый из которых содержит BEMDECL-файл.
.enb/
└── make.js           # ENB-конфиг
desktop.blocks/       # уровень блоков
desktop.bundles/
├── index/
    └── index.bemdecl.js
├── price/
    └── price.bemdecl.js
├── blog/
    └── blog.bemdecl.js
└── contacts/
    └── contacts.bemdecl.js
Чтобы собрать merged-бандл необходимо:
- Создать директорию для - merged-бандла.
- Найти все BEMDECL-файлы во всех бандлах, кроме - merged.
- Скопировать BEMDECL-файлы в - merged-бандл.
- Объединить скопированные BEMDECL-файлы. 
- Настроить сборку так же, как и в обычном бандле на основе объединенного BEMDECL-файла (3). - var fs = require('fs'), path = require('path'), techs = require('enb-bem-techs'), provide = require('enb/techs/file-provider'), css = require('enb-css/techs/css'), js = require('enb-js/techs/browser-js.js') platforms = ['desktop']; module.exports = function (config) { // Создаем директории для merged-бандлов (1) platforms.forEach(function (platform) { var node = path.join(platform + '.bundles', 'merged'); if (!fs.existsSync(node)) { fs.mkdirSync(node); } }); // Предоставляем BEMDECL-файлы из бандлов (2) config.nodes('*.bundles/*', function (nodeConfig) { var node = path.basename(nodeConfig.getPath()); if (node !== 'merged') { nodeConfig.addTechs([ [provide, { target: '?.bemdecl.js' }] ]); } }); // Настраиваем сборку merged-бандла config.nodes('*.bundles/merged', function (nodeConfig) { var dir = path.dirname(nodeConfig.getPath()), bundles = fs.readdirSync(dir), bemdeclFiles = []; // Копируем BEMDECL-файлы в merged-бандл (3) bundles.forEach(function (bundle) { if (bundle === 'merged') return; var node = path.join(dir, bundle), target = bundle + '.bemdecl.js'; nodeConfig.addTech([techs.provideBemdecl, { node: node, target: target }]); bemdeclFiles.push(target); }); // Объединяем скопированные BEMDECL-файлы (4) nodeConfig.addTech([techs.mergeBemdecl, { sources: bemdeclFiles }]); // Обычная сборка бандла (5) nodeConfig.addTechs([ [techs.levels, { levels: ['desktop.blocks'] }], [techs.deps], [techs.files], [css, { target: '?.css' }], [js, { target: '?.js' }] ]); nodeConfig.addTargets(['?.css', '?.js']); }); };
- Запустить сборку в консоли: - $ enb make 
- Проверить результат. - После сборки в директории - mergedбудут созданы- merged.cssи- merged.js, а также служебные файлы.- .enb/ desktop.blocks/ desktop.bundles/ ├── index/ ├── price/ ├── blog/ ├── contacts/ └── merged/ ├── merged.bemdecl.js ... ├── merged.css └── merged.js