Новые возможности bem-
tools для автоматической
сборки проекта
Владимир Алаев
Разработчик
Сергей Белов
Руководитель группы разработки инструментов

Я.Субботник, Москва, 8 сентября 2012 года
Расскажу...

— О системах сборки
— Наш опыт
— Сборка в bem-tools
— Live demo
— Как начать использовать bem-tools




2
От исходных файлов к релизу

— Препроцессинг
— Компиляция
— Постпроцессинг
— Вспомогательные операции




3
Ты что запускаешь
    сборку каждый раз?!
4
Автоматическая сборка

— File watching
— Сборка по запросу (сервер)




5
Доступные инструменты

— make
— Генераторы правил make (automake, cmake)
— Клоны make со своим языком (rake, jake, ant)
— make с исправлением некоторых недостатков
  (ninja, tup, fabricate, redo, shake)




6
О системах сборки
Сергей Белов, Я.Субботник в Киеве




                  http://bit.ly/LUDxeA




7
Наш опыт




8
GNU make

— 3 года использования и разработки
— 1500 строк
— 80 Кб




9
Недостатки

— File based
— Нет автоматической сборки
— Неоптимальная сборка
— Язык для правил




10
bem-tools
Инструмент для работы по БЭМ
— Создание БЭМ-сущностей
— Сборка файлов технологий




11
bem server
Расширение bem-tools
— bem make
— bem server




12
Библиотека APW
Ядро системы сборки
— Выполнение списка задач с зависимостями
— Задача - произвольный JavaScript код
— Параллельное выполнение
— JavaScript (Node.js)




             http://github.com/bem/apw

13
14
15
16
17
18
19
bem make
Надстройка над APW
— Знает про БЭМ
— Предоставляет библиотеку правил сборки
— Кастомизируется под проект конфигами




20
bem server

— HTTP сервер
— Надстройка над bem make
— Хранит состояние
— Отдает файлы с диска после сборки




21
Как начать использовать

— Node.js
— http://github.com/bem/project-stub
— http://github.com/bem/bem-server-demo




22
Live demo




23
Минимальный проект

1. git clone https://github.com/bem/project-stub.git
2. cd project-stub
3. npm install
4. ./node_modules/.bin/bem make
5. ./node_modules/.bin/bem server
6. http://localhost:8080/pages-desktop/index/
   index.html

24
Конфигурация сборки

— Узлы - это JavaScript объекты
— Реализуют определенный интерфейс
— Поведение легко переопределить
— .bem/make.js
— level/.bem/level.js




25
.bem/make.js

— Подключать библиотеки блоков
— Задавать директории с блоками и страницами
— Указывать список собираемых технологий




26
Пример
Подключение внешней библиотеки
 MAKE.decl('Arch', {

       getLibraries: function() {

           return {
               'bem-bl': {
                    type: 'git',
                    url: 'git://github.com/bem/bem-bl.git'
               }
           };
       }
 });



27
Пример
Список собираемых технологий
 MAKE.decl('BundleNode', {
     getTechs: function() {

           return [
               'bemdecl.js',
               'deps.js',
               'bemhtml.js',
               'css',
               'js'
           ];
       }
 });


28
Пример
Сборка merged страниц
 MAKE.decl('BundlesLevelNode', {
     buildMergedBundle: function() {
         return true;
     }
 });




29
Пример
Кое-что посложнее
     'create-test.js-node': function(tech, bundleNode, magicNode) {
         var arch = this.ctx.arch,
             buildNode = new (MAKE.getNodeClass('BemBuildNode'))({
                 root: this.root,
                 bundlesLevel: this.level,
                 levels: ['blocks'],
                 declPath: this.getBundlePath(tech) + '.deps.js',
                 techPath: tech,
                 techName: tech,
                 output: this.getNodePrefix()
             }),

              node = new (MAKE.getNodeClass('TestNode'))(
              {
                  root: this.root,
                  path: this.getBundlePath(tech) + '.deps.js'
              });

          arch.setNode(buildNode);
          arch.setNode(node);

          bundleNode && arch.addParents(buildNode, bundleNode);
          magicNode && arch.addChildren(buildNode, magicNode);
          arch.addParents(node, buildNode);
          return buildNode;
      }



30
Ссылки
— bem-tools
     http://github.com/bem/bem-tools
— Демо-проект
     http://github.com/bem/bem-server-demo
— Ипользование bem make
     http://bit.ly/OsXqvo
— Кастомизация сборки
     http://bit.ly/P17PO5

31
Владимир Алаев
  scff@yandex-team.ru

  scf2k


Сергей Белов
  arikon@yandex-team.ru

  arik0n

More Related Content

PDF
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
PDF
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
PDF
Леонид Васильев "Python в инфраструктуре поиска"
PDF
Devcamp nodejs-2010
PDF
Суперсилы Chrome developer tools
PDF
CSSO — сжимаем CSS
PDF
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
PDF
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
Леонид Васильев "Python в инфраструктуре поиска"
Devcamp nodejs-2010
Суперсилы Chrome developer tools
CSSO — сжимаем CSS
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС

What's hot (20)

PDF
nginx internals
PDF
Произвольная смена дизайна системного скроллбара
PDF
"Пиринговый веб на JavaScript"
PPTX
Tdd webpack + testem + mocha + chai
PDF
По-настоящему ВИЗУАЛЬНОЕ построение лендинг-страниц на WP Gutenberg!
PPTX
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
PPTX
Asynchrony and coroutines
PDF
Domain Specific Languages (for business rules)
PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
PDF
2014.10.15 Сергей Бурладян, Avito.ru
PPTX
JavaScript: прошлое, настоящее и будущее.
PDF
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
PPTX
Moscow js 26 webpack
PDF
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
PDF
Леонид Васильев "Python в инфраструктуре поиска"
PDF
Почему Mojolicious?
PDF
Многопоточность в браузере. Модель акторов — Константин Крамлих
PPTX
Александр Шуменко - Varnish for authenticated users
PDF
Docker с чем едят и для чего используют
PDF
Пластилиновый код: как перестать кодить и начать жить
nginx internals
Произвольная смена дизайна системного скроллбара
"Пиринговый веб на JavaScript"
Tdd webpack + testem + mocha + chai
По-настоящему ВИЗУАЛЬНОЕ построение лендинг-страниц на WP Gutenberg!
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Asynchrony and coroutines
Domain Specific Languages (for business rules)
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
2014.10.15 Сергей Бурладян, Avito.ru
JavaScript: прошлое, настоящее и будущее.
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
Moscow js 26 webpack
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Леонид Васильев "Python в инфраструктуре поиска"
Почему Mojolicious?
Многопоточность в браузере. Модель акторов — Константин Крамлих
Александр Шуменко - Varnish for authenticated users
Docker с чем едят и для чего используют
Пластилиновый код: как перестать кодить и начать жить
Ad

Viewers also liked (17)

PDF
Томми Яаккола «Масштабирование структурных предсказаний»
PDF
Новая Яндекс.Музыка. Особенности разработки iOS-клиента — Сергей Зайцев
PDF
Симаков Алексей - Системы управления кластерами
PDF
Сергей Бережной "Внедрение БЭМ в существующие системы"
PPTX
Подготовка к уроку по безопасности для школьников - Наталья Куканова, Мария Г...
PDF
Ксения Покровская «Проблемы доставки iOS-приложений на тестовые устройства»
PDF
Что же делает разработчик интерфейсов
PDF
Dmitry Soshnikov, Ymc universal apps
PDF
Apache Spark — Егор Пахомов
PDF
Георгий Мостоловица — «Браузеры»
PDF
Denis Lebedev, Swift
PDF
Михаил Даниэль - О недоязыках
PDF
Cocaine: погружение в облака — Евгений Сафронов
PDF
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
PDF
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
PDF
Владимир Варанкин "БЭМ и JavaScript: Зачем мы написали JS-фреймворк?"
PDF
Konstantin Kichinsky, Windows phone colors 43
Томми Яаккола «Масштабирование структурных предсказаний»
Новая Яндекс.Музыка. Особенности разработки iOS-клиента — Сергей Зайцев
Симаков Алексей - Системы управления кластерами
Сергей Бережной "Внедрение БЭМ в существующие системы"
Подготовка к уроку по безопасности для школьников - Наталья Куканова, Мария Г...
Ксения Покровская «Проблемы доставки iOS-приложений на тестовые устройства»
Что же делает разработчик интерфейсов
Dmitry Soshnikov, Ymc universal apps
Apache Spark — Егор Пахомов
Георгий Мостоловица — «Браузеры»
Denis Lebedev, Swift
Михаил Даниэль - О недоязыках
Cocaine: погружение в облака — Евгений Сафронов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Владимир Варанкин "БЭМ и JavaScript: Зачем мы написали JS-фреймворк?"
Konstantin Kichinsky, Windows phone colors 43
Ad

Similar to Владимир Алаев, Сергей Белов "Новые возможности bem-tools для автоматической сборки проекта" (20)

PDF
Сергей Белов "bem server: система сборки фронтенда"
PDF
Сергей Татаринцев — bem-tools v1.0.0
PPT
Презентация к докладу про БЭМ by Mikhail Troshev
 
PDF
basis.js - почему я не бросил разрабатывать свой фреймворк
PDF
Мастер-класс наоборот: вы пишете БЭМ-проект, а мы подсказываем — Евгений Конс...
PDF
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
PDF
GitLab, Prometheus и Grafana с Kubernetes
PDF
Михаил Давыдов "Масштабируемые JavaScript-приложения"
PPTX
MoscowJS 26 webpack presentation
PDF
RequireJS і Magento 2
PDF
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
PPTX
JavaScript-модули "из прошлого в будущее"
PDF
Александр Тармолов "БЭМ и JavaScript: Тестирование"
PDF
Доставка данных в реальном времени.
PDF
webpack: 7 бед - один ответ
PDF
Creating custom module
PDF
От Make к Ansible
PDF
Zend framework 2
PDF
Сергей Константинов — Что интересного готовит нам W3C
PDF
Erlang tasty & useful stuff
Сергей Белов "bem server: система сборки фронтенда"
Сергей Татаринцев — bem-tools v1.0.0
Презентация к докладу про БЭМ by Mikhail Troshev
 
basis.js - почему я не бросил разрабатывать свой фреймворк
Мастер-класс наоборот: вы пишете БЭМ-проект, а мы подсказываем — Евгений Конс...
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
GitLab, Prometheus и Grafana с Kubernetes
Михаил Давыдов "Масштабируемые JavaScript-приложения"
MoscowJS 26 webpack presentation
RequireJS і Magento 2
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
JavaScript-модули "из прошлого в будущее"
Александр Тармолов "БЭМ и JavaScript: Тестирование"
Доставка данных в реальном времени.
webpack: 7 бед - один ответ
Creating custom module
От Make к Ansible
Zend framework 2
Сергей Константинов — Что интересного готовит нам W3C
Erlang tasty & useful stuff

More from Yandex (20)

PDF
Предсказание оттока игроков из World of Tanks
PDF
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
PDF
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
PDF
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
PDF
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
PDF
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
PDF
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
PDF
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
PDF
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
PDF
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
PDF
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
PDF
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
PDF
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
PDF
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
PDF
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
PDF
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
PDF
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
PDF
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
PDF
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Предсказание оттока игроков из World of Tanks
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...

Владимир Алаев, Сергей Белов "Новые возможности bem-tools для автоматической сборки проекта"