SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
Сборка  проектов  с  
помощью  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

Weitere ähnliche Inhalte

Was ist angesagt?

Frontendlab: Cравнить Несравнимое - Юлия Пучнина
Frontendlab: Cравнить Несравнимое  - Юлия ПучнинаFrontendlab: Cравнить Несравнимое  - Юлия Пучнина
Frontendlab: Cравнить Несравнимое - Юлия ПучнинаGeeksLab Odessa
 
Webpack integration
Webpack integrationWebpack integration
Webpack integrationIllia 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 2015InterSystems
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеYandex
 
БЭМ в Мануфактуре РИФ-Воронеж 2014
БЭМ в Мануфактуре РИФ-Воронеж 2014БЭМ в Мануфактуре РИФ-Воронеж 2014
БЭМ в Мануфактуре РИФ-Воронеж 2014Ivan Voischev
 
Frontend - экосистема и будущее: iforum 2015
Frontend - экосистема и будущее: iforum 2015Frontend - экосистема и будущее: iforum 2015
Frontend - экосистема и будущее: iforum 2015Eldar 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 2014Alex Chistyakov
 

Was ist angesagt? (20)

Frontendlab: Cравнить Несравнимое - Юлия Пучнина
Frontendlab: Cравнить Несравнимое  - Юлия ПучнинаFrontendlab: Cравнить Несравнимое  - Юлия Пучнина
Frontendlab: Cравнить Несравнимое - Юлия Пучнина
 
Webpack integration
Webpack integrationWebpack integration
Webpack integration
 
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
 
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
 
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
 
A.pleshkov
A.pleshkovA.pleshkov
A.pleshkov
 
JavaScript завтра / Сергей Рубанов (Exante Limited)
JavaScript завтра / Сергей Рубанов  (Exante Limited)JavaScript завтра / Сергей Рубанов  (Exante Limited)
JavaScript завтра / Сергей Рубанов (Exante Limited)
 
Как Webpack сделал меня счастливее
Как Webpack сделал меня счастливееКак Webpack сделал меня счастливее
Как Webpack сделал меня счастливее
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
 
параллельная загрузка Java script и css файлов без прерывания
параллельная загрузка Java script и css файлов без прерыванияпараллельная загрузка Java script и css файлов без прерывания
параллельная загрузка Java script и css файлов без прерывания
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
 
Обучение фронтенд разработке
Обучение фронтенд разработкеОбучение фронтенд разработке
Обучение фронтенд разработке
 
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
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
 
БЭМ в Мануфактуре РИФ-Воронеж 2014
БЭМ в Мануфактуре РИФ-Воронеж 2014БЭМ в Мануфактуре РИФ-Воронеж 2014
БЭМ в Мануфактуре РИФ-Воронеж 2014
 
Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
Frontend - экосистема и будущее: iforum 2015
Frontend - экосистема и будущее: iforum 2015Frontend - экосистема и будущее: iforum 2015
Frontend - экосистема и будущее: iforum 2015
 
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
 

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

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, лекция № 1Aleksey 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
 

Ähnlich wie Сборка проектов с помощью ENB (20)

Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в Яндексе
 
Errors Tracker
Errors TrackerErrors Tracker
Errors Tracker
 
Алексей Горобец - 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?
 
Sivko
SivkoSivko
Sivko
 
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивностиJS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
 
Раскопки в интерфейсах
Раскопки в интерфейсахРаскопки в интерфейсах
Раскопки в интерфейсах
 
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)
 
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
 
Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1
 
Создание дистрибутивов Drupal. Почему, зачем и как?
Создание дистрибутивов Drupal. Почему, зачем и как?Создание дистрибутивов Drupal. Почему, зачем и как?
Создание дистрибутивов Drupal. Почему, зачем и как?
 
Презентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начатьПрезентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начать
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
 
YaC 2013 Notes
YaC 2013 NotesYaC 2013 Notes
YaC 2013 Notes
 
Создаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияСоздаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровождения
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
 
Gitlab devconf
Gitlab devconfGitlab devconf
Gitlab devconf
 
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
 
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. Внутренности
 

Mehr von Aleksandr Boichenko

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

Mehr von Aleksandr Boichenko (6)

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

Сборка проектов с помощью 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/