A merged bundle contains all BEM entities from all bundles of the platform. The main difference from a common bundle is that the BEMDECL file is created automatically from the BEMDECL files of other bundles.
To learn how to build a bundle, read Building a bundle.
The project contains individual bundles, each of them containing a BEMDECL file.
.enb/
└── make.js # The ENB config file
desktop.blocks/ # blocks level
desktop.bundles/
├── index/
└── index.bemdecl.js
├── price/
└── price.bemdecl.js
├── blog/
└── blog.bemdecl.js
└── contacts/
└── contacts.bemdecl.js
To build a merged bundle, you need to:
-
Create a directory for a
merged
bundle. -
Find all BEMDECL files in all bundles except for
merged
files. -
Copy the BEMDECL files to the
merged
bundle. -
Merge the copied BEMDECL files.
-
Configure the build the same way as for a common bundle using the merged BEMDECL file (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) { // Create a directory for the merged bundles (1) platforms.forEach(function (platform) { var node = path.join(platform + '.bundles', 'merged');
if (!fs.existsSync(node)) {
fs.mkdirSync(node);
}
});
// Provide the BEMDECL files from bundles (2)
config.nodes('*.bundles/*', function (nodeConfig) {
var node = path.basename(nodeConfig.getPath());
if (node !== 'merged') {
nodeConfig.addTechs([
[provide, { target: '?.bemdecl.js' }]
]);
}
});
// Configure the build of the merged bundle
config.nodes('*.bundles/merged', function (nodeConfig) {
var dir = path.dirname(nodeConfig.getPath()),
bundles = fs.readdirSync(dir),
bemdeclFiles = [];
// Copy the BEMDECL files to the merged bundle (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);
});
// Merge the copied BEMDECL files (4)
nodeConfig.addTech([techs.mergeBemdecl, { sources: bemdeclFiles }]);
// Normal bundle build (5)
nodeConfig.addTechs([
[techs.levels, { levels: ['desktop.blocks'] }],
[techs.deps],
[techs.files],
[css, { target: '?.css' }],
[js, { target: '?.js' }]
]);
nodeConfig.addTargets(['?.css', '?.js']);
});
};
6. Launch the build in the console:
```sh
$ enb make
-
Check the result.
After the build, the
merged
directory will contain themerged.css
andmerged.js
files, along with service files..enb/ desktop.blocks/ desktop.bundles/ ├── index/ ├── price/ ├── blog/ ├── contacts/ └── merged/ ├── merged.bemdecl.js ... ├── merged.css └── merged.js