ݺߣ

ݺߣShare a Scribd company logo
Сборка проектов с 
помощью ENB
Александр Бойченко 
@banzalik
Почему не Grunt, Gulp, Brunch?
• Gulp -­‐ Jul 4, 2013 
• Grunt -­‐ Sep 21, 2011 
• Brunch -­‐ Nov 04, 2010 
• ENB -­‐ Mar 07, 2013 
• BEM-­‐Tools (идейный вдохновитель enb и  мой предыдущий 
инструмент для сборки) -­‐ Jan 29, 2010 
• Задолго до BEM-­‐Tools использовал Make
2
Почему ENB?
• Это сборщик проектов, а не «комбайн» как другие инструменты 
• Модульный 
• Оперирует терминами технология, модуль, уровень 
переопределения 
• Быстрый 
• Умеет кешировать результат работы 
• Гибко настраиваемый 
• Поддерживает зависимости на уровне всех технологий 
• Приветствует порядок на файловой системе
3
Немного о терминах
Технология — все файлы на проекте разделяем по группам, 
которые в дальнейшем имеются технологиями. 
Например: 
stylus технология —  все *.styl файлы на проекте 
js технология — все файлы *.js 
html технология — все файлы *.html 
Картинки, тесты, документация, *.php, *.sql, *.tmpl, 
*.server.js, *.client.js, *.md …
4
Немного о терминах
Модуль (блок в терминах BEM) — папка с файлами 
технологий, отвечает за определенную часть функционала. 
Например: 
 menu/ 
  menu.js 
  menu.css 
  menu.tmpl 
  menu.md
5
Немного о терминах
Уровень переопределения — папка с модулями, отвечает 
за значительную или всю часть приложения. 
Например: 
app/ 
  menu/ 
  header/ 
  footer/ 
  react/
6
Фичи
7
Зависимости
8
Для несложных (с точки зрения JS) проектов нет острой 
необходимости в require.js и его аналогов. 
Зависимости описываются в отдельном файле и работают 
для всех технологий (css, js, шаблоны, тесты, документация) 
Любой модуль может содержать любое количество 
зависимостей от других модулей, необходимых для его 
работы. 
Два вида зависимостей, что надо подключить до 
объявления модуля и что можно подключить после
Зависимости
9
({

mustDeps: [

{

block: 'react'

}

],

shouldDeps: [

{

block: 'tabs'

},

{

block: 'comment'

}

]

})
«Гибкие» зависимости
10
Чаще всего для проекта вы собираете только один css/js файл. 
Но иногда, для больших проектов, возникает необходимость 
разделить общий файл на несколько. 
Очень частно это разделение весьма индивидуально и тут нет 
никаких универсальных рецептов о том как это делать. 
Но когда вы с этим сталкиваетесь, то чаще всего возникает боль. 
• Как разделить JS? 
• Как разделить CSS? 
• Как разделить шаблоны?
«Гибкие» зависимости, мой flow.
11
• Все «страницы/экраны» разрабатываются отдельно (отдельные 
файлы) 
• Для каждой страницы есть «верхнеуровневая» декларация 
зависимостей (тут есть шапка, подвал, новости и авторизация) 
• ENB умеет склеивать и вычитать декларации -­‐ с помощью этого 
механизма и разбиения приложения на страницы можно 
собирать какие угодно «бандлы»
«Гибкие» зависимости, пример.
12
Допустим, есть 5 страниц: 
• index 
• news 
• contact 
• about 
• register
«Гибкие» зависимости, пример.
13
Общая сборка: 
• index + news + contact + about + register = all.*
«Гибкие» зависимости, пример.
14
Сборка основной страницы + то, что не хватает остальным 
индивидуально: 
• index.* 
• index -­‐ news= news.*  
• index -­‐ contact = contact.* 
• index -­‐ about = about.*  
• index -­‐ register = register.*
«Гибкие» зависимости, пример.
15
Сборка базы + дополнительные: 
• index.* 
• index -­‐ (news + contact +  about + register) = subpages.*
«Гибкие» зависимости, пример.
16
Сборка базовых страниц + дополнительные: 
• index + register + news = common.* 
• common -­‐ (contact + about) = old.*
«Обратный» порядок сборки
17
Задача: надо собрать css файл. 
Решение: что надо для сборки css? 
common.styl  преобразовать в CSS <— создать общий 
common.styl <— подключить все *.styl файлы, которые 
подходят по правилам зависимостей <— сформировать 
общий файл зависимостей <— обойти все уровни 
переопределения и модули в них, в поиске зависимостей. 
Первый раз восполняются все шаги. Дальше, только то, что 
изменилось и ему точно требуется пересборка.
«Обратный» порядок сборки
18
Плюсы такого подхода: 
-­‐ пересобираем только то, что действительно в этом 
нуждается 
-­‐ понятная, линейная структура зависмостей 
-­‐ кеширование каждого этапа «сборки» 
-­‐ независимые технологии собираются параллельно 
-­‐ значительно увеличиваем скорость сборки
А что если на проекте много страниц?
19
Как правило, скорость сборки таких проектов может 
замедляться линейно, т.к. каждая страница требует  
дополнительного времени на сборку или на генерацию 
all.* файлов. 
На самом деле это нормально — для produсtion сборки. 
Но совсем не подходит при разработке, время на сборку 
таких проектов с каждым днем растет -­‐> растет время 
ожидания сборки и самой разработки.
ENB Server
20
Присутствует режим сервера как в виде самостоятельного 
express-­‐сервера, так и в виде express-­‐middleware. 
Особенности: 
• При изменении файла, сборка не запускается 
• Процесс сборки запускается только тогда, когда браузер запросил 
файл 
• Если файлы техноглии не изменились — отдается файл с кеша
ENB Server
21
• Значительно ускоряется процесс сборки 
• Для каждой страницы собирается минимально необходимый код 
• Собирается только то, с чем вы сейчас работаете 
• Отлично подходит для тех, кто несколько раз меняет код или 
меняет код в разных файлах, а потом смотрит результат его 
работы (нет холостых процессов пересборки, как в случаи в watch) 
• Это самый быстрый способ девелоп сборки проекта из тех, что 
мне известны
Полезные ссылки
22
http://enb-­‐make.info 
https://github.com/enb-­‐make/ 
http://ru.bem.info/tools/bem/bem-­‐tools/ 
http://tech.yandex.ru/events/yasubbotnik/kiev-­‐may-­‐2012/
talks/117/
Спасибо
23
Александр Бойченко 
banzalik@gmail.com 
@banzalik

More Related Content

What's hot (20)

Frontendlab: Cравнить Несравнимое - Юлия Пучнина
Frontendlab: Cравнить Несравнимое  - Юлия ПучнинаFrontendlab: Cравнить Несравнимое  - Юлия Пучнина
Frontendlab: Cравнить Несравнимое - Юлия Пучнина
GeeksLab Odessa
Webpack integration
Webpack integrationWebpack integration
Webpack integration
Illia Zub
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Ontico
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
JSib
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Yandex
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Ontico
JavaScript завтра / Сергей Рубанов (Exante Limited)
JavaScript завтра / Сергей Рубанов  (Exante Limited)JavaScript завтра / Сергей Рубанов  (Exante Limited)
JavaScript завтра / Сергей Рубанов (Exante Limited)
Ontico
Как Webpack сделал меня счастливее
Как Webpack сделал меня счастливееКак Webpack сделал меня счастливее
Как Webpack сделал меня счастливее
Yaroslav Serhieiev
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
Pavel Chertorogov
параллельная загрузка Java script и css файлов без прерывания
параллельная загрузка Java script и css файлов без прерыванияпараллельная загрузка Java script и css файлов без прерывания
параллельная загрузка Java script и css файлов без прерывания
Alexey Vidanov
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
Alex Tumanoff
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
IT-Portfolio
Обучение фронтенд разработке
Обучение фронтенд разработкеОбучение фронтенд разработке
Обучение фронтенд разработке
ITCrowd Almaty
InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015
InterSystems
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Yandex
БЭМ в Мануфактуре РИФ-Воронеж 2014
БЭМ в Мануфактуре РИФ-Воронеж 2014БЭМ в Мануфактуре РИФ-Воронеж 2014
БЭМ в Мануфактуре РИФ-Воронеж 2014
Ivan Voischev
Frontend - экосистема и будущее: iforum 2015
Frontend - экосистема и будущее: iforum 2015Frontend - экосистема и будущее: iforum 2015
Frontend - экосистема и будущее: iforum 2015
Eldar Djafarov
Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014
Alex Chistyakov
Frontendlab: Cравнить Несравнимое - Юлия Пучнина
Frontendlab: Cравнить Несравнимое  - Юлия ПучнинаFrontendlab: Cравнить Несравнимое  - Юлия Пучнина
Frontendlab: Cравнить Несравнимое - Юлия Пучнина
GeeksLab Odessa
Webpack integration
Webpack integrationWebpack integration
Webpack integration
Illia Zub
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Ontico
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
JSib
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Yandex
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Ontico
JavaScript завтра / Сергей Рубанов (Exante Limited)
JavaScript завтра / Сергей Рубанов  (Exante Limited)JavaScript завтра / Сергей Рубанов  (Exante Limited)
JavaScript завтра / Сергей Рубанов (Exante Limited)
Ontico
Как Webpack сделал меня счастливее
Как Webpack сделал меня счастливееКак Webpack сделал меня счастливее
Как Webpack сделал меня счастливее
Yaroslav Serhieiev
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
Pavel Chertorogov
параллельная загрузка Java script и css файлов без прерывания
параллельная загрузка Java script и css файлов без прерыванияпараллельная загрузка Java script и css файлов без прерывания
параллельная загрузка Java script и css файлов без прерывания
Alexey Vidanov
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
Alex Tumanoff
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
IT-Portfolio
Обучение фронтенд разработке
Обучение фронтенд разработкеОбучение фронтенд разработке
Обучение фронтенд разработке
ITCrowd Almaty
InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015
InterSystems
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Yandex
БЭМ в Мануфактуре РИФ-Воронеж 2014
БЭМ в Мануфактуре РИФ-Воронеж 2014БЭМ в Мануфактуре РИФ-Воронеж 2014
БЭМ в Мануфактуре РИФ-Воронеж 2014
Ivan Voischev
Frontend - экосистема и будущее: iforum 2015
Frontend - экосистема и будущее: iforum 2015Frontend - экосистема и будущее: iforum 2015
Frontend - экосистема и будущее: iforum 2015
Eldar Djafarov
Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014
Alex Chistyakov

Similar to Сборка проектов с помощью ENB (20)

Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в Яндексе
Denis Chistyakov
Алексей Горобец - Building Drupal Distributions. Why? When? and How?
Алексей Горобец - Building Drupal Distributions. Why? When? and How?Алексей Горобец - Building Drupal Distributions. Why? When? and How?
Алексей Горобец - Building Drupal Distributions. Why? When? and How?
LEDC 2016
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивностиJS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
GeeksLab Odessa
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
Alexander Gornik
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
Roman Dvornov
Раскопки в интерфейсах
Раскопки в интерфейсахРаскопки в интерфейсах
Раскопки в интерфейсах
Alisher Yakupov
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Pavel Tsukanov
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
GoSharp
Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1
Aleksey Bragin
Создание дистрибутивов Drupal. Почему, зачем и как?
Создание дистрибутивов Drupal. Почему, зачем и как?Создание дистрибутивов Drupal. Почему, зачем и как?
Создание дистрибутивов Drupal. Почему, зачем и как?
Alexei Gorobets
Презентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начатьПрезентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начать
Dmitriy Polisadov
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
Кафедра высокопроизводительных компьютерных технологий ИМКН УрФУ
YaC 2013 Notes
YaC 2013 NotesYaC 2013 Notes
YaC 2013 Notes
Anton Ignatov
Создаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияСоздаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровождения
Ovadiah Myrgorod
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
IT-Portfolio
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
PVasili
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
Oleg Nenashev
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в Яндексе
Denis Chistyakov
Алексей Горобец - Building Drupal Distributions. Why? When? and How?
Алексей Горобец - Building Drupal Distributions. Why? When? and How?Алексей Горобец - Building Drupal Distributions. Why? When? and How?
Алексей Горобец - Building Drupal Distributions. Why? When? and How?
LEDC 2016
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивностиJS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
GeeksLab Odessa
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
Alexander Gornik
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
Roman Dvornov
Раскопки в интерфейсах
Раскопки в интерфейсахРаскопки в интерфейсах
Раскопки в интерфейсах
Alisher Yakupov
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Pavel Tsukanov
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
GoSharp
Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1
Aleksey Bragin
Создание дистрибутивов Drupal. Почему, зачем и как?
Создание дистрибутивов Drupal. Почему, зачем и как?Создание дистрибутивов Drupal. Почему, зачем и как?
Создание дистрибутивов Drupal. Почему, зачем и как?
Alexei Gorobets
Презентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начатьПрезентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начать
Dmitriy Polisadov
Создаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияСоздаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровождения
Ovadiah Myrgorod
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
IT-Portfolio
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
PVasili
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
Oleg Nenashev

More from Aleksandr Boichenko (6)

Developer tools - подробное руководство разработчика
Developer tools - подробное руководство разработчикаDeveloper tools - подробное руководство разработчика
Developer tools - подробное руководство разработчика
Aleksandr Boichenko
Разработка сайтов с учетом мобильных платформ
Разработка сайтов с учетом мобильных платформРазработка сайтов с учетом мобильных платформ
Разработка сайтов с учетом мобильных платформ
Aleksandr Boichenko
Производительность Client-Side
Производительность Client-SideПроизводительность Client-Side
Производительность Client-Side
Aleksandr Boichenko
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.Танка
Aleksandr Boichenko
Приложения для соцсетей. Универсальные приложения на БЭМ
Приложения для соцсетей. Универсальные приложения на БЭМПриложения для соцсетей. Универсальные приложения на БЭМ
Приложения для соцсетей. Универсальные приложения на БЭМ
Aleksandr Boichenko
Developer tools - подробное руководство разработчика
Developer tools - подробное руководство разработчикаDeveloper tools - подробное руководство разработчика
Developer tools - подробное руководство разработчика
Aleksandr Boichenko
Разработка сайтов с учетом мобильных платформ
Разработка сайтов с учетом мобильных платформРазработка сайтов с учетом мобильных платформ
Разработка сайтов с учетом мобильных платформ
Aleksandr Boichenko
Производительность Client-Side
Производительность Client-SideПроизводительность Client-Side
Производительность Client-Side
Aleksandr Boichenko
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.Танка
Aleksandr Boichenko
Приложения для соцсетей. Универсальные приложения на БЭМ
Приложения для соцсетей. Универсальные приложения на БЭМПриложения для соцсетей. Универсальные приложения на БЭМ
Приложения для соцсетей. Универсальные приложения на БЭМ
Aleksandr Boichenko

Сборка проектов с помощью ENB

  • 1. Сборка проектов с помощью ENB Александр Бойченко @banzalik
  • 2. Почему не Grunt, Gulp, Brunch? • Gulp -­‐ Jul 4, 2013 • Grunt -­‐ Sep 21, 2011 • Brunch -­‐ Nov 04, 2010 • ENB -­‐ Mar 07, 2013 • BEM-­‐Tools (идейный вдохновитель enb и мой предыдущий инструмент для сборки) -­‐ Jan 29, 2010 • Задолго до BEM-­‐Tools использовал Make 2
  • 3. Почему ENB? • Это сборщик проектов, а не «комбайн» как другие инструменты • Модульный • Оперирует терминами технология, модуль, уровень переопределения • Быстрый • Умеет кешировать результат работы • Гибко настраиваемый • Поддерживает зависимости на уровне всех технологий • Приветствует порядок на файловой системе 3
  • 4. Немного о терминах Технология — все файлы на проекте разделяем по группам, которые в дальнейшем имеются технологиями. Например: stylus технология — все *.styl файлы на проекте js технология — все файлы *.js html технология — все файлы *.html Картинки, тесты, документация, *.php, *.sql, *.tmpl, *.server.js, *.client.js, *.md … 4
  • 5. Немного о терминах Модуль (блок в терминах BEM) — папка с файлами технологий, отвечает за определенную часть функционала. Например: menu/ menu.js menu.css menu.tmpl menu.md 5
  • 6. Немного о терминах Уровень переопределения — папка с модулями, отвечает за значительную или всю часть приложения. Например: app/ menu/ header/ footer/ react/ 6
  • 8. Зависимости 8 Для несложных (с точки зрения JS) проектов нет острой необходимости в require.js и его аналогов. Зависимости описываются в отдельном файле и работают для всех технологий (css, js, шаблоны, тесты, документация) Любой модуль может содержать любое количество зависимостей от других модулей, необходимых для его работы. Два вида зависимостей, что надо подключить до объявления модуля и что можно подключить после
  • 9. Зависимости 9 ({
 mustDeps: [
 {
 block: 'react'
 }
 ],
 shouldDeps: [
 {
 block: 'tabs'
 },
 {
 block: 'comment'
 }
 ]
 })
  • 10. «Гибкие» зависимости 10 Чаще всего для проекта вы собираете только один css/js файл. Но иногда, для больших проектов, возникает необходимость разделить общий файл на несколько. Очень частно это разделение весьма индивидуально и тут нет никаких универсальных рецептов о том как это делать. Но когда вы с этим сталкиваетесь, то чаще всего возникает боль. • Как разделить JS? • Как разделить CSS? • Как разделить шаблоны?
  • 11. «Гибкие» зависимости, мой flow. 11 • Все «страницы/экраны» разрабатываются отдельно (отдельные файлы) • Для каждой страницы есть «верхнеуровневая» декларация зависимостей (тут есть шапка, подвал, новости и авторизация) • ENB умеет склеивать и вычитать декларации -­‐ с помощью этого механизма и разбиения приложения на страницы можно собирать какие угодно «бандлы»
  • 12. «Гибкие» зависимости, пример. 12 Допустим, есть 5 страниц: • index • news • contact • about • register
  • 13. «Гибкие» зависимости, пример. 13 Общая сборка: • index + news + contact + about + register = all.*
  • 14. «Гибкие» зависимости, пример. 14 Сборка основной страницы + то, что не хватает остальным индивидуально: • index.* • index -­‐ news= news.* • index -­‐ contact = contact.* • index -­‐ about = about.* • index -­‐ register = register.*
  • 15. «Гибкие» зависимости, пример. 15 Сборка базы + дополнительные: • index.* • index -­‐ (news + contact + about + register) = subpages.*
  • 16. «Гибкие» зависимости, пример. 16 Сборка базовых страниц + дополнительные: • index + register + news = common.* • common -­‐ (contact + about) = old.*
  • 17. «Обратный» порядок сборки 17 Задача: надо собрать css файл. Решение: что надо для сборки css? common.styl преобразовать в CSS <— создать общий common.styl <— подключить все *.styl файлы, которые подходят по правилам зависимостей <— сформировать общий файл зависимостей <— обойти все уровни переопределения и модули в них, в поиске зависимостей. Первый раз восполняются все шаги. Дальше, только то, что изменилось и ему точно требуется пересборка.
  • 18. «Обратный» порядок сборки 18 Плюсы такого подхода: -­‐ пересобираем только то, что действительно в этом нуждается -­‐ понятная, линейная структура зависмостей -­‐ кеширование каждого этапа «сборки» -­‐ независимые технологии собираются параллельно -­‐ значительно увеличиваем скорость сборки
  • 19. А что если на проекте много страниц? 19 Как правило, скорость сборки таких проектов может замедляться линейно, т.к. каждая страница требует дополнительного времени на сборку или на генерацию all.* файлов. На самом деле это нормально — для produсtion сборки. Но совсем не подходит при разработке, время на сборку таких проектов с каждым днем растет -­‐> растет время ожидания сборки и самой разработки.
  • 20. ENB Server 20 Присутствует режим сервера как в виде самостоятельного express-­‐сервера, так и в виде express-­‐middleware. Особенности: • При изменении файла, сборка не запускается • Процесс сборки запускается только тогда, когда браузер запросил файл • Если файлы техноглии не изменились — отдается файл с кеша
  • 21. ENB Server 21 • Значительно ускоряется процесс сборки • Для каждой страницы собирается минимально необходимый код • Собирается только то, с чем вы сейчас работаете • Отлично подходит для тех, кто несколько раз меняет код или меняет код в разных файлах, а потом смотрит результат его работы (нет холостых процессов пересборки, как в случаи в watch) • Это самый быстрый способ девелоп сборки проекта из тех, что мне известны
  • 22. Полезные ссылки 22 http://enb-­‐make.info https://github.com/enb-­‐make/ http://ru.bem.info/tools/bem/bem-­‐tools/ http://tech.yandex.ru/events/yasubbotnik/kiev-­‐may-­‐2012/ talks/117/