Upload
yandex
View
514
Download
2
Embed Size (px)
DESCRIPTION
В докладе — гибкая система кэширования, обмен промежуточными данными в процессе сборки, разбиение технологий на более мелкие, субпроцессы для технологий и многое другое.
Citation preview
ENB — сборщик проектов на БЭММарат ДулинBEMup в рамках YaC 2013, Москва
ENB
Высокая скорость сборки для больших проектов
Детальная настройка сборки
Гибкая система кэширования
3
История ENB
Ускорение сборки в Картах
Конфигурация для технологий
Ускорение bem-tools
4
Скорость
Разбиение крупных технологий на более мелкие
Переиспользование промежуточных данных
Кэширование неизменяемых данных
5
Асинхронность
Полная асинхронность
Использованы более быстрые библиотеки (vow вместо Q)
В субпроцессы выделены тяжелые технологии (bemhtml)
6
Настраиваемость
Настройки для технологий
Переиспользование технологий с разными настройками
Все этапы сборки выделены в технологии
7
Настраиваемость технологий
Исходные файлы
Результирующие файлы
Дополнительные параметры
8
Сборка страницы
9
nodeConfig.addTechs([ [require('enb/techs/levels'), {levels: getLevels(config)}], [require('enb/techs/file-provider'), {target: '?.bemdecl.js'}], require('enb/techs/files'), require('enb/techs/deps'), [require('enb/techs/js'), {target: 'hello.js'}], [require('enb/techs/css'), {target: 'world.css'}]]);nodeConfig.addTargets('hello.js', 'world.css');
Разработка технологий
10
module.exports = require('../lib/build-flow').create() .name('js') .target('target', '?.js') .useFileList('js') .justJoinFilesWithComments() .createTech();
Разработка технологий
11
var Vow = require('vow');var vowFs = require('vow-fs');module.exports = require('enb/lib/build-flow').create() .name('js') .target('target', '?.js').useFileList('js') .builder(function(jsFiles) { var node = this.node; return Vow.all(jsFiles.map(function(file) { return vowFs.read(file.fullname, 'utf8').then(function(data) { var filename = node.relativePath(file.fullname); return '/* begin: ' + filename + ' */\n' + data + '\n/* end: ' + filename + ' */'; }); })).then(function(contents) { return contents.join('\n'); }); }).createTech();
Существующие технологииbemdecl-from-bemjson
bemdecl-from-deps-by-tech
bemdecl-merge
bemdecl-provider
bemdecl-test
borschik
browser-js
css-borschik-chunks
css-chunks
css-ie-includes
css-ie
css-ie6
css-ie7
css-ie8
css-ie9
css-includes
css-less
css-stylus-with-nib
css-stylus
css
deps-merge
deps-old
deps-provider
deps-subtract
deps
file-copy
file-merge
file-provider
files
html-from-bemjson-i18n
html-from-bemjson
i18n-keysets-xml
i18n-lang-js-chunks
i18n-lang-js
i18n-merge-keysets
js-bembundle-component-i18n
js-bembundle-component
js-bembundle-page-i18n
js-bembundle-page
js-chunks
js-expand-includes
js-i18n
js-includes
js-test
js
levels
node-js
priv-js-i18n-all
priv-js-i18n
priv-js
pub-js-i18n
symlink
vanilla-js
xsl-2lego
xsl-convert2xml
xsl-html5-i18n
xsl-html5
xsl
xslt
12
Модули для ENB
enb-bemhtml
enb-bemxjst
enb-modules
grunt-enb
13
Комьюнити
Подробная документация
Принято 25 пулл-реквестов
Пакеты enb-bemhtml, enb-bemxjst поддерживаются внешним разработчиком
http://github.com/enb-make/enb
14
Спасибо за внимание
16
@mdevilsmdevils
Марат ДулинТехнический лидергруппы интерфейсов геопоиска