SlideShare a Scribd company logo
1
2
3
4
5
THE FOLLOWING VIDEOHAS 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
Я
› Как обычно собирается фронтенд
› Как сборку можно улучшить
› Декларативное множественное наследование
› Слои для компонентов
› Как начать использовать новое знание
О чём речь
6
› Bootstrap
› БЭМ
› React
› Web Components
› тысячи их
Компонентный подход везде
7
8
9
› Найти все компоненты на FS
› Написать require/import в каждой технологии
Сборка при компонентном подходе
10
› Собираем лишнее
› Не можем гарантировать порядок
Найти все компоненты на FS
11
› Много ручной работы
› Вербозно
› Захардкоджены пути
› Медленно
› Мухи и котлеты
Написать require/import в каждой технологии
12
13
14
15
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 */
index.decl.js
['button', 'link']
Стало
17
› Много ручной работы
› Вербозно
› Захардкоджены пути
› Медленно
› Мухи и котлеты
› Не говорим, где физически находятся файлы
› Не говорим, какие технологии нужны
Декларируем бандл в терминах компонентов
18
Декларация — что и
в каком порядке
подключать в сборку
› Интроспекция с файловой системы
› Написание руками
› Генерация по описанию страницы
Получение декларации
20
Генерация по описанию страницы
21
<button class="button"></button>
<a class="link"></a>
Алгебра деклараций
› Объединение
› Пересечение
› Вычитание
Алгебра деклараций
23
Объединение
24
Декларация 1 Декларация 2 Декларация 3
[ [ [
'header', 'header', 'header',
'button', 'button', 'button',
'link', 'link',
'attach', + = 'attach',
'menu', 'menu',
'image', 'image',
'checkbox', 'checkbox',
'popup' 'popup',
'textarea' 'textarea'
] ] ]
Пересечение
25
Декларация 1 Декларация 2 Декларация 3
[ [ [
'header', 'header', 'header',
'input', 'menu',
'link', ⋂ 'button', =
'attach', 'input',
'checkbox', 'image',
'textarea', 'popup',
'footer' 'footer' 'footer'
] ] ]
Вычитание
26
Декларация 1 Декларация 2 Декларация 3
[ [ [
'button', 'button',
'checkbox', 'checkbox',
'textarea', 'textarea',
'suggest' 'suggest'
'header',
- 'input', =
'button',
'menu'
] ] ]
Композиция.
Зависимости между
компонентами
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 */
Пример
my-component.deps.js
['button', 'link']
Стало
29
my-component.deps.js
{
mustDeps: ['button'],
shouldDeps: ['link']
}
Стало
30
Зависимость как
технология компонента
32
Декларативное
множественное
наследование
Модификаторы
34
А шаблоны?
<button class="button">
<button class="button button_type_submit">
<button class="button button_type_submit button_disabled">
Слои для компонентов
› Дешево обновлять библиотечный код
› Разделять общие части реализации блоков от частных
› Разделять проект на платформы
› Разный код в разработке и продакшене
› Держать темы отдельно от общей логики
Слои позволяют
36
library-components/ # Уровень библиотеки
input/
button/ # Базовая реализация блока button
popup/
project/ # Уровень проекта
input/
button/ # Измененная реализация блока button
header/
Пример
37
common.blocks/button/button.css
.button {
height: 25px;
}
touch.block/button/button.css
.button {
height: 50px;
tap-highlight-color: #ccc;
}
Пример
38
39
40
index.decl.js levels
index.deps.js
TMPLSCSS JS
@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.
['button']
Стало
42
43
import Button from 'b:button';
Как еще может быть
44
Как начать использовать
новое знание
› Для React + Пример
› Для всех остальных + Пример
Как начать использовать
46
› bem.info/methodology/build
› bem.info/forum
› t.me/bem_ru
› слайды
Что дальше
47
48
Ваши вопросы!
Владимир Гриненко
Руководитель группы общих
компонентов интерфейсов
tadatuta@yandex-team.ru
tadatuta
tadatuta
tadatuta

More Related Content

PDF
П — Перелинковка для больших сайтов, принципы построения и практика
PDF
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
PPTX
Зависимости в компонентном вебе, приготовленные правильно
PDF
Шаблонизация
PDF
PDF
JavaScript в терминах БЭМ / Владимир Варанкин (Яндекс)
PDF
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
PDF
basis.js - почему я не бросил разрабатывать свой фреймворк
П — Перелинковка для больших сайтов, принципы построения и практика
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
Зависимости в компонентном вебе, приготовленные правильно
Шаблонизация
JavaScript в терминах БЭМ / Владимир Варанкин (Яндекс)
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
basis.js - почему я не бросил разрабатывать свой фреймворк

Similar to Vladimir Grinenko - "Dependencies in component web done right" (20)

PDF
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
PDF
DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта
PPTX
Sumin
PPTX
Как не утонуть в мегабайтах JS-кода
PDF
Сергей Татаринцев — bem-tools v1.0.0
PDF
Владимир Варанкин "БЭМ и JavaScript: Зачем мы написали JS-фреймворк?"
PDF
Сборка проектов с помощью ENB
PDF
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
PDF
Мастер-класс наоборот: вы пишете БЭМ-проект, а мы подсказываем — Евгений Конс...
PDF
HTML5 Web Components: следующий шаг к модульности вашего проекта
PDF
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
PDF
Библиотека bem-components
PDF
D2D Pizza JS Илья Беда "Куда мы все катимся?"
PPTX
Back to Basics — Как подружить верстку с логикой? | Odessa Frontend Meetup #9
PDF
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
PDF
Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"
PDF
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
PDF
Компонентный веб. Проникновение в дизайн.
PDF
Meet Magento Belarus 2015: Denis Bosak
PDF
Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта
Sumin
Как не утонуть в мегабайтах JS-кода
Сергей Татаринцев — bem-tools v1.0.0
Владимир Варанкин "БЭМ и JavaScript: Зачем мы написали JS-фреймворк?"
Сборка проектов с помощью ENB
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Мастер-класс наоборот: вы пишете БЭМ-проект, а мы подсказываем — Евгений Конс...
HTML5 Web Components: следующий шаг к модульности вашего проекта
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
Библиотека bem-components
D2D Pizza JS Илья Беда "Куда мы все катимся?"
Back to Basics — Как подружить верстку с логикой? | Odessa Frontend Meetup #9
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
Компонентный веб. Проникновение в дизайн.
Meet Magento Belarus 2015: Denis Bosak
Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...
Ad

More from IT Event (20)

PDF
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
PDF
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
PDF
Max Voloshin - "Organization of frontend development for products with micros...
PDF
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
PDF
Konstantin Krivlenia - "Continuous integration for frontend"
PPTX
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
PDF
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
PDF
Dmitry Bartalevich - "How to train your WebVR"
PDF
Aleksey Bogachuk - "Offline Second"
PDF
James Allardice - "Building a better login with the credential management API"
PDF
Fedor Skuratov "Dark Social: as messengers change the market of social media ...
PPTX
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
PPTX
Алексей Рагозин "Java и linux борьба за микросекунды"
PPTX
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
PDF
Наш ответ Uber’у
PDF
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
PDF
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
PDF
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
PDF
Mete Atamel "Resilient microservices with kubernetes"
PDF
Andrew Stain "User acquisition"
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"
Max Voloshin - "Organization of frontend development for products with micros...
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Konstantin Krivlenia - "Continuous integration for frontend"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"
Dmitry Bartalevich - "How to train your WebVR"
Aleksey Bogachuk - "Offline Second"
James Allardice - "Building a better login with the credential management API"
Fedor Skuratov "Dark Social: as messengers change the market of social media ...
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Алексей Рагозин "Java и linux борьба за микросекунды"
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"
Наш ответ Uber’у
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...
Mete Atamel "Resilient microservices with kubernetes"
Andrew Stain "User acquisition"
Ad

Vladimir Grinenko - "Dependencies in component web done right"