50
1

Vladimir Grinenko - "Dependencies in component web done right"

Embed Size (px)

Citation preview

Page 1: Vladimir Grinenko - "Dependencies in component web done right"

1

Page 2: Vladimir Grinenko - "Dependencies in component web done right"

2

Page 3: Vladimir Grinenko - "Dependencies in component web done right"

3

Page 4: Vladimir Grinenko - "Dependencies in component web done right"

4

Page 5: Vladimir Grinenko - "Dependencies in component web done right"

5

THE FOLLOWING VIDEO HAS BEEN APPROVED FOR

ВЕРСТАЛЬЩИКИ AND НОРМАЛЬНЫЕ РАЗРАБОТЧИКИ ALIKE

BY UNITED DEV CONF

THE FOLLOWING TALK HAS BEEN RATED

RESTRICTED

UNDER 18 REQUIRES NO PARENTLY SUPERVISION

OPENSOURCING ELEMENTS INCLUDING SOURCE CODE, SLIDES AND CLEVER THOUGHTS IS HIGHLY APPRECIATED

Я

Page 6: Vladimir Grinenko - "Dependencies in component web done right"

› Как обычно собирается фронтенд

› Как сборку можно улучшить

› Декларативное множественное наследование

› Слои для компонентов

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

О чём речь

6

Page 7: Vladimir Grinenko - "Dependencies in component web done right"

› Bootstrap

› БЭМ

› React

› Web Components

› тысячи их

Компонентный подход везде

7

Page 8: Vladimir Grinenko - "Dependencies in component web done right"

8

Page 9: Vladimir Grinenko - "Dependencies in component web done right"

9

Page 10: Vladimir Grinenko - "Dependencies in component web done right"

› Найти все компоненты на FS

› Написать require/import в каждой технологии

Сборка при компонентном подходе

10

Page 11: Vladimir Grinenko - "Dependencies in component web done right"

› Собираем лишнее

› Не можем гарантировать порядок

Найти все компоненты на FS

11

Page 12: Vladimir Grinenko - "Dependencies in component web done right"

› Много ручной работы

› Вербозно

› Захардкоджены пути

› Медленно

› Мухи и котлеты

Написать require/import в каждой технологии

12

Page 13: Vladimir Grinenko - "Dependencies in component web done right"

13

Page 14: Vladimir Grinenko - "Dependencies in component web done right"

14

Page 15: Vladimir Grinenko - "Dependencies in component web done right"

15

Page 16: Vladimir Grinenko - "Dependencies in component web done right"

index.css

@import "../../path/to/button/button.css"; @import "../../path/to/link/link.css"; /* project styles */

Было

16

index.js

require('../../path/to/button/button.js'); require('../../path/to/link/link.js'); /* project logic */

Page 17: Vladimir Grinenko - "Dependencies in component web done right"

index.decl.js

['button', 'link']

Стало

17

› Много ручной работы

› Вербозно

› Захардкоджены пути

› Медленно

› Мухи и котлеты

Page 18: Vladimir Grinenko - "Dependencies in component web done right"

› Не говорим, где физически находятся файлы

› Не говорим, какие технологии нужны

Декларируем бандл в терминах компонентов

18

Page 19: Vladimir Grinenko - "Dependencies in component web done right"

Декларация — что и в каком порядке подключать в сборку

Page 20: Vladimir Grinenko - "Dependencies in component web done right"

› Интроспекция с файловой системы

› Написание руками

› Генерация по описанию страницы

Получение декларации

20

Page 21: Vladimir Grinenko - "Dependencies in component web done right"

Генерация по описанию страницы

21

<button class="button"></button> <a class="link"></a>

Page 22: Vladimir Grinenko - "Dependencies in component web done right"

Алгебра деклараций

Page 23: Vladimir Grinenko - "Dependencies in component web done right"

› Объединение

› Пересечение

› Вычитание

Алгебра деклараций

23

Page 24: Vladimir Grinenko - "Dependencies in component web done right"

Объединение

24

Декларация 1 Декларация 2 Декларация 3

[ [ [ 'header', 'header', 'header', 'button', 'button', 'button', 'link', 'link', 'attach', + = 'attach', 'menu', 'menu', 'image', 'image', 'checkbox', 'checkbox', 'popup' 'popup', 'textarea' 'textarea' ] ] ]

Page 25: Vladimir Grinenko - "Dependencies in component web done right"

Пересечение

25

Декларация 1 Декларация 2 Декларация 3

[ [ [ 'header', 'header', 'header', 'input', 'menu', 'link', ⋂ 'button', =

'attach', 'input', 'checkbox', 'image', 'textarea', 'popup', 'footer' 'footer' 'footer' ] ] ]

Page 26: Vladimir Grinenko - "Dependencies in component web done right"

Вычитание

26

Декларация 1 Декларация 2 Декларация 3

[ [ [ 'button', 'button', 'checkbox', 'checkbox', 'textarea', 'textarea', 'suggest' 'suggest' 'header', - 'input', = 'button', 'menu' ] ] ]

Page 27: Vladimir Grinenko - "Dependencies in component web done right"

Композиция. Зависимости между компонентами

Page 28: Vladimir Grinenko - "Dependencies in component web done right"

my-component.css

@import "../../path/to/button/button.css"; @import "../../path/to/link/link.css"; /* my-component styles */

Было

28

my-component.js

require('../../path/to/button/button.js'); require('../../path/to/link/link.js'); /* my-component logic */

Пример

Page 29: Vladimir Grinenko - "Dependencies in component web done right"

my-component.deps.js

['button', 'link']

Стало

29

Page 30: Vladimir Grinenko - "Dependencies in component web done right"

my-component.deps.js

{ mustDeps: ['button'], shouldDeps: ['link'] }

Стало

30

Page 31: Vladimir Grinenko - "Dependencies in component web done right"

Зависимость как технология компонента

Page 32: Vladimir Grinenko - "Dependencies in component web done right"

32

Page 33: Vladimir Grinenko - "Dependencies in component web done right"

Декларативное множественное наследование

Page 34: Vladimir Grinenko - "Dependencies in component web done right"

Модификаторы

34

А шаблоны?

<button class="button">

<button class="button button_type_submit">

<button class="button button_type_submit button_disabled">

Page 35: Vladimir Grinenko - "Dependencies in component web done right"

Слои для компонентов

Page 36: Vladimir Grinenko - "Dependencies in component web done right"

› Дешево обновлять библиотечный код

› Разделять общие части реализации блоков от частных

› Разделять проект на платформы

› Разный код в разработке и продакшене

› Держать темы отдельно от общей логики

Слои позволяют

36

Page 37: Vladimir Grinenko - "Dependencies in component web done right"

library-components/ # Уровень библиотеки input/ button/ # Базовая реализация блока button popup/

project/ # Уровень проекта input/ button/ # Измененная реализация блока button header/

Пример

37

Page 38: Vladimir Grinenko - "Dependencies in component web done right"

common.blocks/button/button.css

.button { height: 25px; }

touch.block/button/button.css

.button { height: 50px; tap-highlight-color: #ccc; }

Пример

38

Page 39: Vladimir Grinenko - "Dependencies in component web done right"

39

Page 40: Vladimir Grinenko - "Dependencies in component web done right"

40

index.decl.js levels

index.deps.js

TMPLSCSS JS

Page 41: Vladimir Grinenko - "Dependencies in component web done right"

@import "library/common.blocks/button/button.css"; @import "library/touch.block/button/button.css";

@import "library/design/common.block/button/button.css"; @import "library/design/touch.block/button/button.css";

@import "project/common.blocks/button/button.css"; @import "project/touch.blocks/button/button.css";

Было

41

И аналогично для JS.

Page 42: Vladimir Grinenko - "Dependencies in component web done right"

['button']

Стало

42

Page 43: Vladimir Grinenko - "Dependencies in component web done right"

43

Page 44: Vladimir Grinenko - "Dependencies in component web done right"

import Button from 'b:button';

Как еще может быть

44

Page 45: Vladimir Grinenko - "Dependencies in component web done right"

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

Page 46: Vladimir Grinenko - "Dependencies in component web done right"

› Для React + Пример

› Для всех остальных + Пример

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

46

Page 47: Vladimir Grinenko - "Dependencies in component web done right"

› bem.info/methodology/build

› bem.info/forum

› t.me/bem_ru

› слайды

Что дальше

47

Page 48: Vladimir Grinenko - "Dependencies in component web done right"

48

Page 49: Vladimir Grinenko - "Dependencies in component web done right"

Ваши вопросы!

Page 50: Vladimir Grinenko - "Dependencies in component web done right"

Владимир Гриненко Руководитель группы общих компонентов интерфейсов

[email protected]

tadatuta

tadatuta

tadatuta