Top Banner
HTML5 Web Components: следующий шаг к модульности вашего проекта Андрей Рахманов, Enaza DevConf 2015, 19 июня 2015 г.
72

DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Aug 12, 2015

Download

Software

rakhmanoff
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

HTML5 Web Components:

следующий шаг к модульности

вашего проекта

Андрей Рахманов, Enaza

DevConf 2015, 19 июня 2015 г.

Page 2: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

2

Page 3: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Как мы решили попробовать

3

Page 4: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Single-Page App

4

Page 6: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Google I/O 2014

<google-map></google-map>

6

Page 7: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

7

Page 8: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Поиск подходящего решения

• Плохо сочетать Backbone.js с другими

фреймворками

• Надо использовать native-реализацию или

библиотеку

8

Page 9: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Составные части Web Components

• Templates

• HTML Imports

• Custom Elements

• Shadow DOM

9

Page 10: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Native: Пока весьма печально…

Templates

HTML Imports

Custom Elements

Shadow DOM

10

Page 11: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Polyfills: Уже лучше!

Templates

HTML Imports

Custom Elements

Shadow DOM

11

Page 12: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Какие варианты есть на текущий

момент?

Bosonic

X-Tag (Mozilla)

Native

Polymer (Google)12

Page 13: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Мы выбрали Polymer

• Декларативное описание элементов

• Удобный «синтаксический сахар» над

нативной реализацией

13

Page 14: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

14

На пороге интеграции

в существующий проект

Page 15: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Подключаем один компонент

my-component

15

Page 16: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Подключаем один компонент

my-component

level_1_1

polymer.html

16

Page 17: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Подключаем один компонент

my-component

level_2_1

level_2_2

level_2_3

level_1_1

polymer.html

17

Page 18: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

1 import == 6 запросов

а за ним пойдут…

18

Page 19: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Out-of-box: Polymer Vulcanize

Реализация:

Использование:

19

Page 20: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

polymer.html

component_1.html

component_2.html component_3.html

styles.css

script.js

20

Page 21: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Подключение: HTML Import сборки

1 лишний запрос

не так страшен

Сборка

кэшируется21

Page 22: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Взаимодействие

с используемым стеком:

Jade, Stylus и Browserify

22

Page 23: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Стек технологий

23

Page 24: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Стек технологий

24

Page 25: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Стек технологий

25

Page 26: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Как делаем мы

26

Page 27: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Чего ожидает от нас Polymer

<dom-module>

<style>

</style>

<template>

</template>

</dom-module>

<script>

</script>

Файл с компонентом

}27

Page 28: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

? vulcanize

28

Page 29: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Вот кто нам поможет!29

Page 30: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Gulp Task: Jade -> HTML

30

Page 31: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Gulp Task: Stylus -> CSS

31

Page 32: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Gulp Task: склеим 3 файла в 1

32

Page 33: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

first.html

second.html

third.html

33

Page 34: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

first.html

second.html

third.html

vulcanize

register_components.html

html imports:

first.html

second.html

third.html

34

Page 35: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Этот реестр формирует Gulp

35

Page 36: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Управление JS-зависимостями

<script src="…"> VS require('module')

36

Page 37: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

<script src="…"> VS require('module')

• Одного JS-файла в компоненте не хватает

• Почему не использовать <script src="…">?CommonJS удобнее!

• Polymer не поддерживает CommonJS.Как формировать сборку в таком случае?

37

Page 38: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

* jQuery *

* plugins *

* lodash *

* Backbone *

vendor.js

expose external

app.js

external

components.htmlmain.js

module_1.js

* jQuery *

не дублируется 38

Page 39: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Генерация шаблонов

39

Page 40: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

40

Page 41: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Резюме

• Web Components успешно интегрируются с имеющимися инструментами

• Gulp способен решить множество задач по сборке Web Components

• Создание нового компонента сводится к одной строке кода для генератора

41

Page 42: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

42

Где применить

веб-компоненты?

Page 43: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Декомпозиция Single-Page App

Переиспользуемые логические блоки

На высоком уровне

Расширение стандартных элементов управления

На низком уровне

43

Page 44: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Низкий уровень

Расширение стандартных

элементов управления

44

Page 45: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Расширение стандартных

элементов управления• <input is="up-autoresizable" />

- автоподстройка длины

• <input is="up-colorpicker" />- выбор цвета с альфа-каналом- указание цвета числом

• <up-textarea-count></..>- подсчет числа оставшихся символов

• <up-select></..>- иерархия- запрещенные значения в списке

45

Page 46: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

<input is="up-autoresizable"/>

| наследование

| от input

| подключение

| плагина

| отключение

| плагина

| зависимости через

| Browserify

46

Page 47: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

<input is="up-colorpicker"/>

| наследование

| от input

| кастомное

| событие

47

Page 48: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

48

Page 49: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

<up-textarea-count>

| Public API

| для взаимодействия

|

|

|

49

Page 50: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

50

Page 51: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

<up-select>

| свойства

| для биндинга

|

|

|

|

|

|

|

51

Page 52: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

52

Page 53: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Высокий уровень

Переиспользуемые

логические блоки

53

Page 54: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

<внешний блок (атрибуты…)>

<внутренний блок 1 (атрибуты…)>

<поле 1>

<поле 2>

<внутренний блок 2 (атрибуты…)>

<поле 1>

<поле 2>

54

Page 55: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Полигон для испытаний55

Page 56: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Полигон для испытаний56

Page 57: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

<up-inspector>

<!– элементы управления -->

<!– элементы управления -->

<up-inspector-list label="Позиционирование"

<!– элементы управления -->

<up-inspector label="Свойства"…

<up-inspector-list label="Отступы"

<!– элементы управления -->

57

Page 58: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

58

Page 59: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

<up-sausage>

<up-state-marker />

<up-sausage type="full" inner-length="200" length="400" …

59

Page 60: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

60

Page 61: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Резюме

• Web Components сильны на обоих уровнях

• И разметка, и логика превращаются в

набор логических блоков

• Полученный результат удобно

поддерживать

61

Page 62: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Так здорово ли работать

с веб-компонентами

в реальном проекте?

62

Page 63: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

63

Определенно, ДА!

Page 64: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Наиболее частые проблемы

• Не все документировано

• Возможны изменения API

• Мало информации на stackoverflow

по свежим версиям библиотек

(…но это временно)

64

Page 65: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Полезные ресурсы

65

Page 66: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

webcomponents.org

66

Page 67: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

customelements.io

67

Page 68: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

component.kitchen

68

Page 69: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Pluralsight - HTML5

Web Component Fundamentals

69

Page 70: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

polymer-project.org

70

Page 71: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Резюме

• Интеграция в реальный проект – уже возможна

• Инструменты – активно развиваются

• Библиотеки уже сегодня имеют широкие

возможности

• Вы получаете модульность, о которой можно

только мечтать!

71

Page 72: DevConf 2015. HTML5 Web Components: следующий шаг к модульности вашего проекта

Андрей Рахманов

[email protected]

Дмитрий Чертков

[email protected]

goo.gl/xBTtuu

Попробуйте Web Components

Это вкусно!

Презентация

goo.gl/McfoKLПроект UnderPage

72