Библиотека bem-components — Ангелина Сидорцова, Яндекс

46
Библиотека bemcomponents Гела Сидорцова, Служба разработки БЭМ, BEMup в СанктПетербурге, 6 сентября 2014

Upload: yandex

Post on 15-Jan-2015

282 views

Category:

Technology


3 download

DESCRIPTION

Мы строили-строили. Мы тестировали-тестировали. Мы писали документацию. Некоторые из вас принимали в этом активное участие и уже пользуются плодами работы. Теперь мы хотим поделиться нашими совместными результатами (18 готовых блоков!), рассказать о том, как вы можете ускорить разработку своих проектов, о том, что ждёт впереди, и о том, как сделать свою собственную библиотеку блоков такой же удобной и качественной, как это получилось с библиотекой bem-components.

TRANSCRIPT

Page 1: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Библиотека    bem-­‐components

Гела  Сидорцова,  Служба  разработки  БЭМ,    BEMup  в  Санкт-­‐Петербурге,  6  сентября  2014

Page 2: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Гела  Сидорцова

gela-­‐d@yandex-­‐team.ru  

@gela_dd  

github.com/gela-­‐d  

Руководитель  группы                                                                                                            разработки  БЭМ-­‐библиотек

2

Page 3: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Краткое  содержание

Page 4: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Содержание

общее  о  библиотеке  

компонентный  подход  

уровни  

CodeStyle  

тестирование  (unit-­‐,  шаблоны,  gemini)  

conjnuous  integrajon

4

Page 5: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

bem-­‐components

Page 6: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

bem-­‐components

6

bem.info/libs/bem-components/

Page 7: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

bem-­‐components

основана  на  bem-­‐core  

19  блоков  

релиииииииз!

7

Page 8: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

aqach buqon checkbox control-­‐group

dropdown icon input link

menu radio select spin

bem-­‐components:  blocks

8

Page 9: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Разработчики

9

Page 10: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Разработчики  и  документаторы

10

Page 11: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Компонентая  разработка

Page 12: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Уровни

12

Page 13: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Уровни

13

button

logo

user

input

navigationmarket-block

actions

map

search-block

Page 14: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Зачем?

удобно  разрабатываться  

удобно  дебажить  

стили,  js,  документация,  шаблоны,  всё,  все  разделено!!  

тестирование  отдельных  кусков  кода  

удобное  использование  на  проектах

14

Page 15: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Уровни  пере-­‐  и  доопределений

Page 16: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Уровни

common  

desktop  

touch  

touch-­‐pad  

touch-­‐phone  

design

16

.blocks

Page 17: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

theme / state plain mouseDown

default!!

без темы

simple!!

button_theme_simple

normal!!

button_theme_normal

design

17

Page 18: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

tech.yandex.ru/events/yasubbotnik/minsk-aug-2013/talks/1046/

Уровни

18

Page 19: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

CodeStyle

Page 20: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

CodeStyle

jshint  

jscs  

jshint-­‐groups  

precommithook

20

Page 21: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Тестирование

Page 22: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Тестирование

unit-­‐тесты  для  js  

тесты  на  шаблоны  

визуальные  тесты  (gemini)  

ручное

22

Page 23: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

unit-­‐тесты

Page 24: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

unit-­‐тесты

пишем  отдельно  на  каждый  блок  

проверка  гарантированного  API  

mocha  тестовый  framework  

синтаксис:  visionmedia.github.io/mocha    

виртуальный  браузер  –  PhantomJS  

Istanbul  для  проверки  покрытия  

common.blocks/block/block.spec.js

24

Page 25: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

unit-­‐тесты

25

Page 26: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

unit-­‐тесты

26

Page 27: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Istanbul

27

Показывает % покрытия unit-тестами

Page 28: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Шесты  на  таблоны

Page 29: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Шаблонизаторы

29

Входные  данные

Шаблоны

BEMHTML BH

html

Page 30: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Тесты  на  шаблоны

пишем  на  каждый  блок  

сравниваем  результат  BEMHTML  и  BH  с  эталонным  HTML  

проверяется  с  помощью  tmpl-­‐specs  +  html-­‐differ  

common.blocks/block/block.tmpl-­‐specs/*.bemjson.js

30

Page 31: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Тесты  на  шаблоны

31

Page 32: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Тесты  на  шаблоны

32

Page 33: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Gemini

Page 34: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

gemini

тестирование  верстки  

в  разных  браузерах  

разных  состояний  

умеет  скриншотить  небольшие  куски  

Подробнее  в  докладе  «Тестирование  CSS-­‐регрессий  с  Gemini  —  Сергей  Татаринцев»                                                                                                ru.bem.info/talks/bemup-­‐moscow-­‐2014

34

Page 35: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

gemini-­‐тесты

пишем  на  каждый  блок  

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

common.blocks/block/block.tests/gemini.bemjson.js

35

Page 36: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

gemini-­‐тесты

36

enabled / .capture('plain')

/ .capture('click', …)

/ .capture('text', …)

disabled / .capture('plain')

Page 37: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

gemini-­‐тесты

37

Собираем пример. Запускаем тесты.

Page 38: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

gemini-­‐тесты

38

Собираем пример. Запускаем тесты. Again.

Page 39: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

gemini-­‐тесты

39

Наглядно смотрим: /gemini-report/index.html

Page 40: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Conjnuous  integrajon

Page 41: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Conjnuous  integrajon.  Travis.

41

Page 42: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Итоги

Page 43: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

«А  карлик  ей  и  говорит»:

деление  на  компоненты  –  хорошо  

тесты  на  все,  что  можно  –  хорошо  

блоки  есть  в  opensource  

часть  про  тестирование  в  opensource

43

Page 44: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Потрогать/посмотреть

 bem.info/libs/bem-­‐components  

 github.com/bem/bem-­‐components

44

начать использовать и получать массу удовольствия

Page 45: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Гела  Сидорцова  Руководитель  группы  разработки  БЭМ-­‐библиотек

gela-­‐d@yandex-­‐team.ru twiqer.com/bem_ru

ru.bem.info/forum

bem.info

Page 46: Библиотека bem-components  — Ангелина Сидорцова, Яндекс

Анкета  обратной  связи

46

bit.ly/spb-feedback

Он уже заполнил. А ты?