BEM loader
The module has several purposes:
- load CSS from bem-based project
- provide functions to combine bemhtml templates from bem-based project
Loading CSS
It's necessary to set up plugin:
var loader = require('bem-loader');
var CollectBemAssetsPlugin = loader.CollectBemAssetsPlugin;
module.exports = {
plugins: [
new CollectBemAssetsPlugin({
done: (data) => { loader.setStylesData(data.css); },
techs: ['css', 'bemhtml'],
techExtensions: {
bemhtml: ['bemhtml', 'bemhtml.js']
},
levels: [
'./bem-project/common.blocks',
]
}),
]
};
And use loader:
require('bem-loader!./button.css');
You can also generate stubs using StubsCreatorPlugin:
var loader = require('bem-loader');
var CollectBemAssetsPlugin = loader.StubsCreatorPlugin;
var stubsDir = './bem-stubs';
module.exports = {
plugins: [
new StubsCreatorPlugin({
stubsDir,
componentNames: [
'button',
'select',
],
}),
]
};
And somethere in your code:
require('./bem-stubs');
Loading BEMHTML
var loader = require('bem-loader');
var CollectBemAssetsPlugin = loader.CollectBemAssetsPlugin;
var generateBemHtml = loader.generateBemHtml;
module.exports = {
plugins: [
new CollectBemAssetsPlugin({
done: function(data) {
if (process.env.STANDALONE) {
var out = bemxjst.vidom.generate(generateBemHtml(data.bemhtml));
fs.writeFileSync(
'./dist/bem-templates.js',
out
);
}
},
techs: ['bemhtml'],
levels: [
'./bem-project/common.blocks'),
]
}),
],
};