UNPKG

enb

Version:

Faster BEM/BEViS assembler

67 lines (59 loc) 2.15 kB
/** * file-merge * ========== * * Склеивает набор файлов в один. * * **Опции** * * * *String[]* **sources** — Список исходных таргетов. Обязательная опция. * * *String* **target** — Результирующий таргет. Обязательная опция. * * *String* **divider** — Строка для склеивания файлов. По умолчанию — "\n". * * *Boolean* **sourcemap** — Построение карт кода (source maps) с информацией об исходных файлах. * * **Пример** * * ```javascript * nodeConfig.addTech([ require('enb/techs/file-merge'), { * sources: ['?.bemhtml', '?.pre.js'] * target: '?.js' * } ]); * ``` */ var vow = require('vow'), enb = require('../lib/api'), vfs = enb.asyncFs, File = require('enb-source-map/lib/file'); module.exports = enb.buildFlow.create() .name('file-merge') .target('target', '?.target') .defineOption('divider', '\n') .defineRequiredOption('target') .defineRequiredOption('sources') .defineOption('sourcemap', false) .useSourceListFilenames('sources') .builder(function (sources) { var divider = this._divider; var sourcemap = this._sourcemap; var target = this._target; var node = this.node; return vow.all(sources.map(function (sourceFilename) { return vfs.read(sourceFilename, 'utf8'); })).then(function (results) { if (!sourcemap) { return results.join(divider); } var relFileNames = sources.map(node.relativePath, node); return joinWithSourceMaps(relFileNames, results, divider, target); }); }) .createTech(); /// function joinWithSourceMaps(fileNames, contents, divider, target) { var targetFile = new File(target, {sourceMap: true, comment: 'block'}); fileNames.forEach(function (file, i) { targetFile.writeFileContent(file, contents[i]); targetFile.write(divider); }); return targetFile.render(); }