Skip to content

Instantly share code, notes, and snippets.

@belozer
Last active August 10, 2016 01:00
Show Gist options
  • Save belozer/bc80a98996c7b4e30618030a0e8a5317 to your computer and use it in GitHub Desktop.
Save belozer/bc80a98996c7b4e30618030a0e8a5317 to your computer and use it in GitHub Desktop.
var techs = {
// essential
fileProvider: require('enb/techs/file-provider'),
fileMerge: require('enb/techs/file-merge'),
// optimization
borschik: require('enb-borschik/techs/borschik'),
// css
css: require('enb-css/techs/css'),
postcss: require('enb-bundle-postcss/techs/enb-bundle-postcss'),
// js
browserJs: require('enb-js/techs/browser-js'),
bemBabel: require('enb-bem-babel/techs/bem-babel'),
// bemtree
bemtree: require('enb-bemxjst/techs/bemtree'),
// bemhtml
bemhtml: require('enb-bemxjst/techs/bemhtml'),
bemjsonToHtml: require('enb-bemxjst/techs/bemjson-to-html')
};
var enbBemTechs = require('enb-bem-techs');
var levels = [
{path: 'libs/bem-core/common.blocks', check: false},
{path: 'libs/bem-core/desktop.blocks', check: false},
{path: 'libs/bem-components/common.blocks', check: false},
{path: 'libs/bem-components/desktop.blocks', check: false},
{path: 'libs/bem-components/design/common.blocks', check: false},
{path: 'libs/bem-components/design/desktop.blocks', check: false},
{path: 'libs/bem-forms/common.blocks', check: true},
'blocks/@common',
'blocks/@desktop'
];
module.exports = function(config) {
var isProd = process.env.YENV === 'production';
config.nodes('bundles/*', function(nodeConfig) {
nodeConfig.addTechs([
// essential
[enbBemTechs.levels, {levels: levels}],
[techs.fileProvider, {target: '?.bemdecl.js'}],
[enbBemTechs.deps],
[enbBemTechs.files],
// css
[techs.css, {
target: '?.post.css',
sourceSuffixes: ['post.css', 'css', 'styl'],
autoprefixer: {
browsers: ['ie >= 10', 'last 2 versions', 'opera 12.1', '> 2%']
}
}],
[techs.postcss, {
source: '?.post.css',
sourcemap: true,
plugins: [
require('postcss-nested'),
require('pobem'),
require('postcss-media-minmax')(),
require('postcss-custom-media'),
require('postcss-css-variables')(),
require('lost')(),
require('sharps').postcss({
columns: 12, // default
maxWidth: '1100px',
gutter: '10px',
flex: 'flex'
}),
require('postcss-svg')({
paths: ['bem/icons'],
defaults: "[fill-opacity]: 1",
svgo: true,
debug: true
})
]
}],
// bemtree
[techs.bemtree, {sourceSuffixes: ['bemtree', 'bemtree.js']}],
// bemhtml
[techs.bemhtml, {
sourceSuffixes: ['bemhtml', 'bemhtml.js'],
forceBaseTemplates: true,
engineOptions: {elemJsInstances: true}
}],
// html
[techs.bemjsonToHtml],
// BABEL START
[enbBemTechs.depsByTechToBemdecl, {
target : '?.js.bemdecl.js',
sourceTech : 'js',
destTech : 'browser'
}],
[enbBemTechs.deps, {
target : '?.js.deps.js',
bemdeclFile : '?.js.bemdecl.js'
}],
[enbBemTechs.files, {
depsFile : '?.js.deps.js',
filesTarget : '?.js.files',
dirsTarget : '?.js.dirs'
}],
[techs.bemBabel, {
filesTarget : '?.js.files',
target : '?.source.js'
}],
// BABEL END
// js
[techs.browserJs, {
includeYM: true,
sourceSuffixes: ['source.browser.js', 'vanilla.js', 'js', 'browser.js'],
iife: true
}],
[techs.fileMerge, {
target: '?.js',
sources: ['?.browser.js', '?.bemhtml.js', '?.bemtree.js']
}],
// borschik
[techs.borschik, {source: '?.js', target: '?.min.js', minify: isProd}],
[techs.borschik, {source: '?.css', target: '?.min.css', freeze: true, minify: isProd}]
]);
nodeConfig.addTargets(['?.bemtree.js', '?.bemhtml.js', '?.min.css', '?.min.js']);
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment