jslab. Дмитрий Смолин, Дмитрий Филипенко. "react и webpack с...

46
react & webpack с помощью кирки, лома и какой-то матери Дмитрий Филипенко Дмитрий Смолин

Upload: geekslab

Post on 15-Jul-2015

214 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

react & webpackс помощью кирки, лома и какой-то матери

Дмитрий Филипенко

Дмитрий Смолин

Page 2: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

Пару слов о нас

•  Чем занимаемся?

•  Задачи которые решаем

2

Page 3: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"
Page 4: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"
Page 5: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"
Page 6: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

ФаннелМаркетинг:

•  формирует впечатление

•  рассказывает о продукте

•  продает

Технически:

•  набор статических страниц

6

Page 7: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"
Page 8: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

История

•  django и java (2008-2014)

•  шаблоны в jinja и javamarkup

•  jQuery + mootools

•  vue.js (2014-2015)

•  полностью клиентский

•  стили stylus

•  vue.js + flux

8

Page 9: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

Однообразие

•  Хотелось больше однообразия не хотелось зоопарка технологий

•  Использовать знакомые технологии html, css, js

9

Page 10: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

Простой инструмент

Мы хотели простой инструмент, который мог бы:

•  дев сервер

•  деплой на AmazonS3

•  minify/uglify/concatenate/preprocessing

•  запускаться одной командой

10

Page 11: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"
Page 12: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

Пергамент

•   Assets pipeline → JS Assets pipline

•   Stylus

•   Сборка

•   Деплой

Page 13: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

Оставшиеся вопросы

•  Выбор фреймворка для большей компонентности

13

Page 14: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"
Page 15: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

В поиске

•  Angular – слишком много java на клиенете;

•  Ember – странный какой-то;

•  Backbone, Knockout – нет;

Хотелось меньше вкладываться во фреймворк, а больше в сам

продукт

15

Page 16: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

•  Эстетичность

•  Непринужденность

•  Легкость в использование

Vue.JS

http://vuejs.org/guide/faq.html

16

Page 17: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

Получилось

•  Меньше панка, больше правильной структуры

•  Простое добавление новых компонентов

•  Легкость в разработке

17

Page 18: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"
Page 19: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"
Page 20: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

Почему react?

•  простота “Пишешь одну функцию render и это все!”

•  (state, props) → view

•  недостающая деталь браузера

•  будущее

•  react native, etc.

20

Page 21: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

« Removing User Interface Complexity,or Why React is Awesome »

article by James Long

goo.gl/9Rorzf

Page 22: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

Почему webpack?

•  следующий шаг после browserify

•  ресурсы – тоже модули! (стили, шрифты, картинки, etc.)

•  элегантное деление на чанки

•  горячее обновление кода

•  плагины (unix-подход работает плохо)

22

Page 23: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

« How Instagram.com Works »speech by Pete Hunt

goo.gl/ovF9LO

Page 24: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

Боль перехода

•  webpack все еще ужасен

•  что-то всегда идет не так (баги, незрелый дизайн)

•  разработчики хотят возможностей, а не головной боли

•  копипаст

•  большой страшный конфиг

•  скрипты сборки, запуска сервера, etc.

•  прочие батарейки

24

Page 25: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

Boilerplate?

•  как обновлять?

•  кишки повсюду! и они шевелятся! :-O

•  низкое качество кода

•  в угоду компактности

•  без мыслей о расширяемости

25

Page 26: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

Библиотека!

•  просто как npm install

•  легко обновлять

•  прозрачна в использовании

•  качественный код

26

Page 27: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

wap•  библиотека-фреймворк

•  для создания веб-приложений

•  с использованием react & webpack

Page 28: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

wap

•  разумные настройки по умолчанию

•  сборщик для dev и prod окружения

•  dev сервер с горячей заменой кода

•  сервер

•  генератор страниц

•  прочие батарейки:

•  маршрутизация и навигация, обрамление страницы, babel, etc.

28

Page 29: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"
Page 30: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

webpack – конфигурация

•  родная – набор шестеренок

•  три места куда нужно воткнуть лом, чтобы включить hot reload

•  каждую точку входа нужно тюкнуть киркой чтобы получить dev, etc.

•  а хочется пульт управления

•  программируемая конфигурация

•  опирается на более высокоуровневые настройки

•  класс, можно унаследоваться и что-то перекрыть

30

Page 31: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

webpack – карта точек входа

•  хотим хэши в именах файлов ( e.g. a1ff706364/main.js )

•  как сервер найдет эти файлы?

•  stats → entries_mapping.json

•  только нужное в удобном формате

•  используются сервером и генератором страниц

31

Page 32: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

webpack – загрузчики

•   import fontStyles from './font.styl'

•  добавит js модуль, подключащий стили из font.styl

•  можно превратить в классический css (по желанию)

•   import logo from './logo.png'

•  добавит js модуль, возвращающий url картинки

•  сложит картинку куда нужно с нужным именем (хэши!)

•  можно создавать свои!

32

Page 33: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

webpack – загрузчики

•  а как же серверная сторона?

•  – собираем клиентский код и для нее

•  webpack к этому не готов!

•  – берем в руки лом =^_^=

Page 34: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

webpack – пакуем для сервера

•  другие точки входа (нужно только приложение, используем *.web.js)

•  единственный чанк на точку входа (убираем лишние)

•  отделяем не-клиентский код (выбор точки подключения, externals)

•  вырезаем стили (null-loader)

•  чиним асинхронную загрузку (неприятный хак)

•  source maps

•  обоженуещеточто?!?!?!111

34

Page 35: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

dev сервер

•  хотим перегружать при изменениях

•  nodemon? – увы! (нужен шаг пересборки)

•  делаем руками (gulp.watch(), process.spawn(), run-sequence, etc.)

•  не забываем опцию cache для webpack

•  делаем отключаемой (фронтенду удобнее перегружать явно)

35

Page 36: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

react – обрамление

•  react плохо работает вне body

•  нам нужна страница целиком! (для сервера и генератора страниц)

•  шаблонизатор? – нет, снова react

•  обрамление ← renderToStaticMarkup() (содержит placeholder)

•  страница приложения ← renderToString()

•  обрамление.replace(placeholder, страница)

36

Page 37: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

« React: CSS in JS »slides by Christopher "vjeux" Chedeau

goo.gl/QVqwZp

Page 38: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

react – css in js

•  а как же hover, after, media types, etc?

•  css in js, но вычленять в css? – сложно и ненадежно

•  гибридный подход

•  легко сделать в js? → css in js

•  проще в css? → stylus

•  покомпонентные стили

•  держим рядом с компонентом

38

Page 39: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

react – css in js?

•  гибридный подход вернулись к stylus

•  проще переносить существующий код

•  css in js – много вопросов

•  как перекрыть inline? (important)

•  через js местами костыльно (media)

•  нет/мало готовых инструментов

•  боимся нарваться

•  генерируем уникальные имена классов (загрузчик)

39

Page 40: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

react – данные

•  flux? reflux? fluxor? … – история их рассудит

•  EventEmitter (и немного дисциплины)

•  хотим данных? – подписались на сервис

•  хотим действие? – вызвали метод сервиса

•  помним про CQRS (Command Query Responsibility Segregation)

40

Page 41: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

CQRS

Page 42: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

babel

•  ES6-счастье! (умеет jsx, experimental=true)

•  медленный?

•  исключаем node_modules… (и ряд других каталогов)

•  учим wap собирать саму себя (и любые другие либы тоже)

•  source maps?

42

Page 43: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

« Lint Like It’s 2015 »article by Dan Abramov

goo.gl/BPvSVY

Page 44: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

wap

•  скоро будет в open source

•  ориентирована на наши задачи

•  все еще есть большие пробелы

•  сборник проблем, решений и ответов на вопросы

•  см. напр. default_settings*.js

44

Page 45: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

We are hiring!Text engine developer Google docs text engine

Interface developer UI/UX, React, ES6

[email protected]

Page 46: JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери"

react & webpackс помощью кирки, лома и какой-то матери

Вопросы?

Дмитрий Смолин & Дмитрий Филипенко, [email protected], [email protected]