Виталий Харисов "Настоящее и будущее БЭМ"

Preview:

DESCRIPTION

Полный обзор существующих частей БЭМ-экосистемы. Рассказ о том, что у нас есть сейчас, в какой оно степени готовности, в чём нам можно помочь в разработке БЭМ, а также о наших желаниях на будущее.

Citation preview

Руководитель разработки на Украине

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

Настоящее и будущее БЭМ

Виталий Харисов

Здравствуйте, меня зовут Виталий Харисов.

Сегодня я хочу дать вам обзор существующих частей БЭМ, рассказать что у нас есть сейчас.

Поговорить о наших планах на будущее и чем нам можно помочь в разработке БЭМ.

Методология

5

— Порядок в коде

— Упрощение работы в команде

Так же они упрощают командную работу — каждый игрок в команде не пишет код по своим правилам, а делает это согласовано с другими членами команды.

tutorials/ prerequisites.wiki hello-world.wiki second-page.wiki

Технологии: ДокументацияМетодология

10

Это нас приводит к тому, что документация к проекту тоже может быть выражена в терминах БЭМ и работать с ней можно точно так же, как с кодом проекта.

Здесь каждый файл это отдельный блок с одной технологией .wiki

blocks/ .bem/ level.js head/ foot/ …

Уровни переопределенияМетодология

12

Каждый уровень переопределения может иметь свою настройку схемы именования БЭМ-сущностей и настройку технологий, которые используются при создании блоков.

blocks-common/

blocks-desktop/

pages-desktop/index/

Наборы уровней переопределенияМетодология

18

Уровни переопределения собираются в наборы, которые задают порядок, в котором собирается финальная реализация блока.

bem-toolsИнструменты

37

— создавать

— уровни переопределения

— блоки

— элементы

— модификаторы

…создавать уровни переопределения, блоки, элементы, модификаторы; …

bem-toolsИнструменты

39

— работать с технологиями

— технологии по умолчанию

На уровне переопределения можно задать технологии по умолчанию, использующиеся при создании сущностей на этом уровне.

bem-toolsИнструменты

40

— работать с технологиями

— технологии по умолчанию

— шаблоны технологий

У любой технологии можно задать шаблон, который будет использоваться при создании.

bem-toolsИнструменты

41

— работать с технологиями

— технологии по умолчанию

— шаблоны технологий

— добавлять к имеющимся

Можно добавлять технологии к уже имеющимся сущностям.

bem-toolsИнструменты

44

— работать с уровнями переопределения

— при создании

— при сборке

…при сборке указывается набор уровней, которые надо использовать.

Работа с файламиИнструменты

49

— borschikgithub.com/veged/borschik

— setochkagithub.com/afelix/setochka

Инструменты для работы с файлами:

* Расширяемый сборщик текстовых файлов. Может использоваться для сборки CSS, JS и других файлов.

* Сеточка позволяет выделить CSS-свойств исходного CSS в отдельные файлы. Может использоваться для разбиения CSS-файла на несколько с вендорными префиксами.

Парсеры / языкиИнструменты

51

— OmetaJSgithub.com/veged/ometa-js

— smakowikigithub.com/veged/shmakowiki

— gonzales (в разработке)github.com/afelix/gonzales

Мы разрабатываем парсеры для языков и сами языки:

* OmetaJS — объектно-ориентированный язык для построения парсеров * shmakowiki — диалект wiki, используем для своей документации * gonzales — быстрый парсер CSS (в разработке)

ЯдроБиблиотека блоков bem-bl

53

— шаблонизатор bemhtml

Первая часть это ядро, оно реализует технологии для облегчения работы с блоками.

Это шаблонизатор bemhtml, про который будет подробно рассказывать Вегед.

ЯдроБиблиотека блоков bem-bl

54

— шаблонизатор bemhtml

— фреймворк клиентского JavaScript

И фреймворк для написания клиентского JavaScript, про который будет отдельная секция докладов от Вовы, Вари и Саши.

ЯдроБиблиотека блоков bem-bl

55

— шаблонизатор bemhtml

— фреймворк клиентского JavaScript

— ядро — это блок!

ВАЖНО: Ядро это тоже блок и мы не навязываем его использование.

ЯдроБиблиотека блоков bem-bl

56

— шаблонизатор bemhtml

— фреймворк клиентского JavaScript

— ядро — это блок!

— можно заменить на свой блок

Можно этот блок и не использовать, например, если вы разрабатываете систему, где нельзя брать сторонний код.

Блоки для сайтовБиблиотека блоков bem-bl

57

— блоков мало

— демонстрация как делать свои блоки

Так же в библиотеке есть минимальный набор блоков, помогающий в реализации сайта.

Мы понимаем, что это не полноценный набор блоков для построения сайта.

Этот набор можно рассматривать как демонстрационный, на этом примере можно понять, как делать свои блоки.

Варианты использования БЭМ

58

Хочу обратить внимание, что БЭМ не имеет единственно правильного варианта использования и не стремится его получить.

Наоборот, мы рассматриваем БЭМ как набор правил, который каждая конкретная команда встраивает в свой процесс разработки и использует так, как удобно.

Давайте посмотрим на примерах.

myfacebook/ styles.css scripts.js index.html

И верстаетеБлоки в одном файле

61

Используйте самую простую схему на файловой системе, когда реализация всех блоков лежит в одном файле соответствующей технологии.

При использовании этого варианта всё делается руками, без bem-tools.

blocks/ b-myblock/ b-myblock_mod_val1.css b-myblock__opt-elem.css b-myblock__opt-elem_mod_val1.css b-myblock.css

Не обязательное в файлах

65

…можно вынести их реализацию в отдельные файлы, чтобы подключать только то, что нужно.

blocks/ b-myblock/ _mod/ b-myblock_mod_val1.css b-myblock__opt-elem.css b-myblock__opt-elem_mod_val1.css b-myblock.css

Модификаторы в директориях

67

…для каждого можно сделать отдельную директорию. Это разгрузит корневую директорию блока.

Элементы/модификаторыв директориях

68

Самый сложный в разработке, но самый понятный вариант по конечной структуре, когда ВСЕ элементы блока и ВСЕ модификаторы имеют свои директории.

blocks/ b-myblock/ _mod/ b-myblock_mod_val1.css __elem/ b-myblock__elem.css b-myblock.css

Элементы/модификаторыв директориях

69

Этот вариант самый наглядный, при взгляде на файловую систему можно увидеть всю структуру блока.

Можно упростить его, вынося в директории только необязательные элементы, а код обязательных элементов класть в основной файл блока.

Будущее

70

Итак, это то, что у нас есть уже сейчас.

Дальше я расскажу о наших планах на ближайшие полгода/год и в чём нам можно помочь, ибо планов гораздо больше, чем мы успеваем сделать.

Полный стек

74

— сложные системы

— методология для всех частей системы

— инструменты для всех частей системы

Эти правила должны быть подкреплены инструментами.

Полный стек

75

— сложные системы

— методология для всех частей системы

— инструменты для всех частей системы

— много работы по документации

У нас практически уже всё есть для этого, предстоит большая работа по документированию и доведению до состояния, когда внешние люди могут использовать весь стек технологий для своей разработки.

Сайт bem.info

78

— вся информация на одном сайте

— английский / русский

Сайт будет на двух языках, русском и английском, с возможностью добавления других языков.

Как помочь?Сайт bem.info

80

— Перевод документации на другие языки

— Поддержка актуальности перевода

Перевод документации на другие языки с поддержкой актуальности этого перевода по мере изменения оригинальной документации.

Как помочь?Сайт bem.info

81

— Перевод документации на другие языки

— Поддержка актуальности перевода

— Документация по настройке (Windows)

— Туториалы по внедрению БЭМ на сайты

* написание документации * по настройке окружения (например, в Windows) * туториалы по внедрению БЭМ в сайты, где он не используется

Инструменты

82

В разработке bem-tools мы сейчас сосредоточены на сборке проекта.

При этом есть вещи, которые мы хотим сделать в bem-tools помимо этого и тут может пригодиться ваша помощь.

bem moveИнструменты

83

— перемещение сущностей между уровнями

— переименование сущностей

— блок в элемент и наоборот

— перемещение модификаторов

* перемещение сущностей между уровнями переопределения с учётом настроек уровней переопределения * переименование сущностей * превращение блоков в элементы и наоборот * перемещение модификаторов * между блоками и элементами

Инфраструктура библиотек блоков

88

— создавать свои библиотеки блоков

— документация к библиотеке

— changelog'и

— скрипты миграции между версиями

— сайт с примерами и документацией

…неким набором правил и инструментов, которые позволят разработчикам

* создавать свои библиотеки блоков * писать к ним документацию * скрипты миграции с версии на версию * changelog'и * построить сайт для библиотеки блоков с живыми примерами и документацией

Библиотеки блоков

90

— много вместо одной

— логическая целостность

— независимое использование

Мы хотим сделать независимый набор библиотек блоков, каждая из которых будет обладать логической целостностью, чтобы их можно было использовать независимо.

Зачем?Библиотеки блоков

91

— разные мейнтейнеры

— разные релизные циклы

— проще развивать и поддерживать

Зачем это нужно делать:

* много маленьких библиотек проще раздать в поддержку разным людям * маленькие библиотеки можно выпускать с разной скоростью * проще развивать и поддерживать

ПримерыБиблиотеки блоков

92

— bl-coreкорневые блоки на которых строятся последующие

— bl-genericблоки, которые часто встречаются в вёрстке страниц: ссылки, иконки

— bl-formблоки для реализации форм, в том числе контролы форм

Можно выделить в отдельные библиотеки ядро, блоки общего назначения, для работы с формами…

ПримерыБиблиотеки блоков

93

— bl-layoutтиповые раскладки страниц

— bl-searchпоисковая форма и выдача результатов поиска

— bl-Oashподключение флеша на страницу

— bl-authаутентификация пользователей

…типовые раскладки страниц, поиск по сайту, работа с флешем, аутентификация пользователей и так далее.

Как сейчасСреда разработки

95

— работа с файловой системой

— поддержка целостности

— руками

— bem-tools

Сейчас разработчик, использующий БЭМ слишком близко находится к файловой системе и тратит часть своего времени на поддержание целостности проекта на файловой системе руками или с помощью bem-tools.

Как хотимСреда разработки

96

— работа с БЭМ, а не файлами

— работа на всех платформах

— разработка в браузере!

— доступ к коду сайта рядом с самим сайтом

— Cloud9?

Нужна среда для разработки, которая будет знать про БЭМ, про уровни переопределения и помогать разработчику писать код так, чтобы он был хорошо структурированным.

При этом эта среда не должна быть привязана к какой-то определённой платформе.

В идеале она вообще должна работать в браузере.

По одному адресу своего сайта разработчик редактирует код, а по другому адресу смотрит результат.

Мы сейчас смотрим в сторону Cloud9.

НастоящееПодведём итог

98

— Методология

— Инструменты

— Библиотека блоков

— Шаблонизатор bemhtml

— JavaScript фреймворк i-bem.js

Мы сегодня рассмотрели настоящее БЭМ, увидели, что он состоит из:

* Методологии * Инструментов * Библиотеки блоков * Технологий для шаблонизации и построения клиентского кода на JavaScript

БудущееПодведём итог

99

— Полный стек

— Сайт bem.info

— Развитие инструментов

— Библиотеки блоков

— Среда разработки

И попробовали заглянуть в ближайшее будущее:

* Мы строим полный стек * Будем сделать сайт со всей информацией * Дальше развивать инструменты * Делать библиотеки блоков * И среду для разработки