UNPKG

enb

Version:

Faster BEM/BEViS assembler

69 lines (67 loc) 2.71 kB
/** * js-bembundle-component * ====================== * * Технология переехала в пакет `enb-bembundle`. */ var Vow = require('vow'); var dropRequireCache = require('../lib/fs/drop-require-cache'); module.exports = require('../lib/build-flow').create() .name('js-bembundle-component') .deprecated('enb', 'enb-bembundle') .useSourceListFilenames('jsChunksTargets', ['?.js-chunks.js']) .useSourceListFilenames('cssChunksTargets', ['?.css-chunks.js']) .target('target', '?.bembundle.js') .builder(function (jsChunkFilenames, cssChunkFilenames) { var jsChunks = []; var cssChunks = []; cssChunkFilenames.forEach(function (cssChunksFilename) { dropRequireCache(require, cssChunksFilename); cssChunks = cssChunks.concat(require(cssChunksFilename)); }); jsChunkFilenames.forEach(function (jsChunksFilename) { dropRequireCache(require, jsChunksFilename); jsChunks = jsChunks.concat(require(jsChunksFilename)); }); return this.buildBundle(jsChunks, cssChunks); }) .methods({ buildBundle: function (jsChunks, cssChunks) { var _this = this; return Vow.when(this.buildJsBody(jsChunks)).then(function (jsBody) { var hcssChunks = cssChunks.map(function (chunk) { return [chunk.hash, chunk.data]; }); return [ 'BEM.blocks[\'i-loader\'].loaded({', 'id: \'', _this.node.getTargetName(), '\',\n', 'js: function(){\n', _this.__self.getOnceFunctionDecl(), '\n', jsBody, '\n},\n', 'hcss: ', JSON.stringify(hcssChunks, null, 4), '\n', '});' ].join(''); }); }, buildJsBody: function (jsChunks) { var _this = this; return jsChunks.map(function (chunk) { return _this.__self.wrapWithOnceIf(chunk.data, chunk.fullname, chunk.hash); }).join('\n'); } }) .staticMethods({ getOnceFunctionDecl: function () { return '(function(){ this._ycssjs || ' + '(this._ycssjs=function(a,b){return !(a in _ycssjs||_ycssjs[a]++)}) })();\n'; }, wrapWithOnceIf: function (data, filename, hash) { return 'if (_ycssjs("' + hash + '")) {\n' + '// ' + filename + '\n' + data + '\n}'; }, getExistingChunkDecl: function (hash) { return '_ycssjs("' + hash + '");\n'; } }) .createTech();