SlideShare a Scribd company logo
react & webpack
с помощью кирки, лома и какой-то матери
Дмитрий Филипенко
Дмитрий Смолин
Пару слов о нас
•  Чем занимаемся?
•  Задачи которые решаем
2
Фаннел
Маркетинг:
•  формирует впечатление
•  рассказывает о продукте
•  продает
Технически:
•  набор статических страниц
6
История
•  django и java (2008-2014)
•  шаблоны в jinja и javamarkup
•  jQuery + mootools
•  vue.js (2014-2015)
•  полностью клиентский
•  стили stylus
•  vue.js + flux
8
Однообразие
•  Хотелось больше однообразия не хотелось зоопарка технологий
•  Использовать знакомые технологии html, css, js
9
Простой инструмент
Мы хотели простой инструмент, который мог бы:
•  дев сервер
•  деплой на AmazonS3
•  minify/uglify/concatenate/preprocessing
•  запускаться одной командой
10
Пергамент
•   Assets pipeline → JS Assets pipline
•   Stylus
•   Сборка
•   Деплой
Оставшиеся вопросы
•  Выбор фреймворка для большей компонентности
13
В поиске
•  Angular – слишком много java на клиенете;
•  Ember – странный какой-то;
•  Backbone, Knockout – нет;
Хотелось меньше вкладываться во фреймворк, а больше в сам
продукт
15
•  Эстетичность
•  Непринужденность
•  Легкость в использование
Vue.JS
http://vuejs.org/guide/faq.html
16
Получилось
•  Меньше панка, больше правильной структуры
•  Простое добавление новых компонентов
•  Легкость в разработке
17
Почему react?
•  простота “Пишешь одну функцию render и это все!”
•  (state, props) → view
•  недостающая деталь браузера
•  будущее
•  react native, etc.
20
« Removing User Interface Complexity,
or Why React is Awesome »
article by James Long
goo.gl/9Rorzf
Почему webpack?
•  следующий шаг после browserify
•  ресурсы – тоже модули! (стили, шрифты, картинки, etc.)
•  элегантное деление на чанки
•  горячее обновление кода
•  плагины (unix-подход работает плохо)
22
« How Instagram.com Works »
speech by Pete Hunt
goo.gl/ovF9LO
Боль перехода
•  webpack все еще ужасен
•  что-то всегда идет не так (баги, незрелый дизайн)
•  разработчики хотят возможностей, а не головной боли
•  копипаст
•  большой страшный конфиг
•  скрипты сборки, запуска сервера, etc.
•  прочие батарейки
24
Boilerplate?
•  как обновлять?
•  кишки повсюду! и они шевелятся! :-O
•  низкое качество кода
•  в угоду компактности
•  без мыслей о расширяемости
25
Библиотека!
•  просто как npm install
•  легко обновлять
•  прозрачна в использовании
•  качественный код
26
wap
•  библиотека-фреймворк
•  для создания веб-приложений
•  с использованием react & webpack
wap
•  разумные настройки по умолчанию
•  сборщик для dev и prod окружения
•  dev сервер с горячей заменой кода
•  сервер
•  генератор страниц
•  прочие батарейки:
•  маршрутизация и навигация, обрамление страницы, babel, etc.
28
webpack – конфигурация
•  родная – набор шестеренок
•  три места куда нужно воткнуть лом, чтобы включить hot reload
•  каждую точку входа нужно тюкнуть киркой чтобы получить dev, etc.
•  а хочется пульт управления
•  программируемая конфигурация
•  опирается на более высокоуровневые настройки
•  класс, можно унаследоваться и что-то перекрыть
30
webpack – карта точек входа
•  хотим хэши в именах файлов ( e.g. a1ff706364/main.js )
•  как сервер найдет эти файлы?
•  stats → entries_mapping.json
•  только нужное в удобном формате
•  используются сервером и генератором страниц
31
webpack – загрузчики
•   import fontStyles from './font.styl'
•  добавит js модуль, подключащий стили из font.styl
•  можно превратить в классический css (по желанию)
•   import logo from './logo.png'
•  добавит js модуль, возвращающий url картинки
•  сложит картинку куда нужно с нужным именем (хэши!)
•  можно создавать свои!
32
webpack – загрузчики
•  а как же серверная сторона?
•  – собираем клиентский код и для нее
•  webpack к этому не готов!
•  – берем в руки лом =^_^=
webpack – пакуем для сервера
•  другие точки входа (нужно только приложение, используем *.web.js)
•  единственный чанк на точку входа (убираем лишние)
•  отделяем не-клиентский код (выбор точки подключения, externals)
•  вырезаем стили (null-loader)
•  чиним асинхронную загрузку (неприятный хак)
•  source maps
•  обоженуещеточто?!?!?!111
34
dev сервер
•  хотим перегружать при изменениях
•  nodemon? – увы! (нужен шаг пересборки)
•  делаем руками (gulp.watch(), process.spawn(), run-sequence, etc.)
•  не забываем опцию cache для webpack
•  делаем отключаемой (фронтенду удобнее перегружать явно)
35
react – обрамление
•  react плохо работает вне body
•  нам нужна страница целиком! (для сервера и генератора страниц)
•  шаблонизатор? – нет, снова react
•  обрамление ← renderToStaticMarkup() (содержит placeholder)
•  страница приложения ← renderToString()
•  обрамление.replace(placeholder, страница)
36
« React: CSS in JS »
slides by Christopher "vjeux" Chedeau
goo.gl/QVqwZp
react – css in js
•  а как же hover, after, media types, etc?
•  css in js, но вычленять в css? – сложно и ненадежно
•  гибридный подход
•  легко сделать в js? → css in js
•  проще в css? → stylus
•  покомпонентные стили
•  держим рядом с компонентом
38
react – css in js?
•  гибридный подход вернулись к stylus
•  проще переносить существующий код
•  css in js – много вопросов
•  как перекрыть inline? (important)
•  через js местами костыльно (media)
•  нет/мало готовых инструментов
•  боимся нарваться
•  генерируем уникальные имена классов (загрузчик)
39
react – данные
•  flux? reflux? fluxor? … – история их рассудит
•  EventEmitter (и немного дисциплины)
•  хотим данных? – подписались на сервис
•  хотим действие? – вызвали метод сервиса
•  помним про CQRS (Command Query Responsibility Segregation)
40
CQRS
babel
•  ES6-счастье! (умеет jsx, experimental=true)
•  медленный?
•  исключаем node_modules… (и ряд других каталогов)
•  учим wap собирать саму себя (и любые другие либы тоже)
•  source maps?
42
« Lint Like It’s 2015 »
article by Dan Abramov
goo.gl/BPvSVY
wap
•  скоро будет в open source
•  ориентирована на наши задачи
•  все еще есть большие пробелы
•  сборник проблем, решений и ответов на вопросы
•  см. напр. default_settings*.js
44
We are hiring!
Text engine developer Google docs text engine
Interface developer UI/UX, React, ES6
kigorw@grammarly.com
react & webpack
с помощью кирки, лома и какой-то матери
Вопросы?
Дмитрий Смолин & Дмитрий Филипенко, Grammarly
dimsmol@gmail.com, wind.fd@gmail.com

More Related Content

What's hot

Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Ontico
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
IT-Portfolio
 
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Ontico
 
Как Webpack сделал меня счастливее
Как Webpack сделал меня счастливееКак Webpack сделал меня счастливее
Как Webpack сделал меня счастливее
Yaroslav Serhieiev
 
Alex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projectsAlex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projects
Alexander Baumgertner
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
Sergey Xek
 
Дмитрий Кушников — БЭМ глазами бэкенд-разработчика
Дмитрий Кушников — БЭМ глазами бэкенд-разработчикаДмитрий Кушников — БЭМ глазами бэкенд-разработчика
Дмитрий Кушников — БЭМ глазами бэкенд-разработчика
Yandex
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Pavel Dovbush
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianMikhail Davydov
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
Ontico
 
Павел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыПавел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыUA Mobile
 
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Yandex
 
Крыша 2.0
Крыша 2.0Крыша 2.0
WebCamp2016:Front-End_Юрий Артюх_Современные подходы в верстке
WebCamp2016:Front-End_Юрий Артюх_Современные подходы в версткеWebCamp2016:Front-End_Юрий Артюх_Современные подходы в верстке
WebCamp2016:Front-End_Юрий Артюх_Современные подходы в верстке
WebCamp
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
Ontico
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
IT-Portfolio
 
ASP.NET MVC 4
ASP.NET MVC 4ASP.NET MVC 4
ASP.NET MVC 4
GetDev.NET
 
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBСерверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBStepan Stolyarov
 

What's hot (20)

Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
 
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
 
Как Webpack сделал меня счастливее
Как Webpack сделал меня счастливееКак Webpack сделал меня счастливее
Как Webpack сделал меня счастливее
 
Alex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projectsAlex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projects
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Дмитрий Кушников — БЭМ глазами бэкенд-разработчика
Дмитрий Кушников — БЭМ глазами бэкенд-разработчикаДмитрий Кушников — БЭМ глазами бэкенд-разработчика
Дмитрий Кушников — БЭМ глазами бэкенд-разработчика
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
 
Little Service in 2h
Little Service in 2hLittle Service in 2h
Little Service in 2h
 
Павел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыПавел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузеры
 
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
 
Крыша 2.0
Крыша 2.0Крыша 2.0
Крыша 2.0
 
WebCamp2016:Front-End_Юрий Артюх_Современные подходы в верстке
WebCamp2016:Front-End_Юрий Артюх_Современные подходы в версткеWebCamp2016:Front-End_Юрий Артюх_Современные подходы в верстке
WebCamp2016:Front-End_Юрий Артюх_Современные подходы в верстке
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
 
ASP.NET MVC 4
ASP.NET MVC 4ASP.NET MVC 4
ASP.NET MVC 4
 
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBСерверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDB
 

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

Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
IT-Portfolio
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
Roman Dvornov
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Ontico
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
Andrei Kaleshka
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
Dev2Dev
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
IT-Portfolio
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
Denis Izmaylov
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
MoscowJS
 
Mihail Korepanov
Mihail KorepanovMihail Korepanov
Mihail Korepanov
yaevents
 
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Yandex
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
HappyDev
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Ontico
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
Roman Dvornov
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ontico
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Ontico
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON
 
2 bdw.key
2 bdw.key2 bdw.key
2 bdw.key
antishmanti
 

Similar to JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, лома и какой-то матери" (20)

Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
 
Mihail Korepanov
Mihail KorepanovMihail Korepanov
Mihail Korepanov
 
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
Sivko
SivkoSivko
Sivko
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
2 bdw.key
2 bdw.key2 bdw.key
2 bdw.key
 

More from GeeksLab Odessa

DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
GeeksLab Odessa
 
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
GeeksLab Odessa
 
DataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский ВикторDataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский Виктор
GeeksLab Odessa
 
DataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображениеDataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображение
GeeksLab Odessa
 
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
GeeksLab Odessa
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
GeeksLab Odessa
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
GeeksLab Odessa
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
GeeksLab Odessa
 
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
GeeksLab Odessa
 
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
GeeksLab Odessa
 
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
GeeksLab Odessa
 
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
GeeksLab Odessa
 
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
GeeksLab Odessa
 
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
GeeksLab Odessa
 
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
GeeksLab Odessa
 
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
GeeksLab Odessa
 
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
GeeksLab Odessa
 
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
GeeksLab Odessa
 
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
GeeksLab Odessa
 
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
GeeksLab Odessa
 

More from GeeksLab Odessa (20)

DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
 
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
 
DataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский ВикторDataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский Виктор
 
DataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображениеDataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображение
 
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
 
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
 
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
 
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
 
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
 
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
 
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
 
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
 
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
 
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
 
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
 
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
 

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

  • 1. react & webpack с помощью кирки, лома и какой-то матери Дмитрий Филипенко Дмитрий Смолин
  • 2. Пару слов о нас •  Чем занимаемся? •  Задачи которые решаем 2
  • 3.
  • 4.
  • 5.
  • 6. Фаннел Маркетинг: •  формирует впечатление •  рассказывает о продукте •  продает Технически: •  набор статических страниц 6
  • 7.
  • 8. История •  django и java (2008-2014) •  шаблоны в jinja и javamarkup •  jQuery + mootools •  vue.js (2014-2015) •  полностью клиентский •  стили stylus •  vue.js + flux 8
  • 9. Однообразие •  Хотелось больше однообразия не хотелось зоопарка технологий •  Использовать знакомые технологии html, css, js 9
  • 10. Простой инструмент Мы хотели простой инструмент, который мог бы: •  дев сервер •  деплой на AmazonS3 •  minify/uglify/concatenate/preprocessing •  запускаться одной командой 10
  • 11.
  • 12. Пергамент •   Assets pipeline → JS Assets pipline •   Stylus •   Сборка •   Деплой
  • 13. Оставшиеся вопросы •  Выбор фреймворка для большей компонентности 13
  • 14.
  • 15. В поиске •  Angular – слишком много java на клиенете; •  Ember – странный какой-то; •  Backbone, Knockout – нет; Хотелось меньше вкладываться во фреймворк, а больше в сам продукт 15
  • 16. •  Эстетичность •  Непринужденность •  Легкость в использование Vue.JS http://vuejs.org/guide/faq.html 16
  • 17. Получилось •  Меньше панка, больше правильной структуры •  Простое добавление новых компонентов •  Легкость в разработке 17
  • 18.
  • 19.
  • 20. Почему react? •  простота “Пишешь одну функцию render и это все!” •  (state, props) → view •  недостающая деталь браузера •  будущее •  react native, etc. 20
  • 21. « Removing User Interface Complexity, or Why React is Awesome » article by James Long goo.gl/9Rorzf
  • 22. Почему webpack? •  следующий шаг после browserify •  ресурсы – тоже модули! (стили, шрифты, картинки, etc.) •  элегантное деление на чанки •  горячее обновление кода •  плагины (unix-подход работает плохо) 22
  • 23. « How Instagram.com Works » speech by Pete Hunt goo.gl/ovF9LO
  • 24. Боль перехода •  webpack все еще ужасен •  что-то всегда идет не так (баги, незрелый дизайн) •  разработчики хотят возможностей, а не головной боли •  копипаст •  большой страшный конфиг •  скрипты сборки, запуска сервера, etc. •  прочие батарейки 24
  • 25. Boilerplate? •  как обновлять? •  кишки повсюду! и они шевелятся! :-O •  низкое качество кода •  в угоду компактности •  без мыслей о расширяемости 25
  • 26. Библиотека! •  просто как npm install •  легко обновлять •  прозрачна в использовании •  качественный код 26
  • 27. wap •  библиотека-фреймворк •  для создания веб-приложений •  с использованием react & webpack
  • 28. wap •  разумные настройки по умолчанию •  сборщик для dev и prod окружения •  dev сервер с горячей заменой кода •  сервер •  генератор страниц •  прочие батарейки: •  маршрутизация и навигация, обрамление страницы, babel, etc. 28
  • 29.
  • 30. webpack – конфигурация •  родная – набор шестеренок •  три места куда нужно воткнуть лом, чтобы включить hot reload •  каждую точку входа нужно тюкнуть киркой чтобы получить dev, etc. •  а хочется пульт управления •  программируемая конфигурация •  опирается на более высокоуровневые настройки •  класс, можно унаследоваться и что-то перекрыть 30
  • 31. webpack – карта точек входа •  хотим хэши в именах файлов ( e.g. a1ff706364/main.js ) •  как сервер найдет эти файлы? •  stats → entries_mapping.json •  только нужное в удобном формате •  используются сервером и генератором страниц 31
  • 32. webpack – загрузчики •   import fontStyles from './font.styl' •  добавит js модуль, подключащий стили из font.styl •  можно превратить в классический css (по желанию) •   import logo from './logo.png' •  добавит js модуль, возвращающий url картинки •  сложит картинку куда нужно с нужным именем (хэши!) •  можно создавать свои! 32
  • 33. webpack – загрузчики •  а как же серверная сторона? •  – собираем клиентский код и для нее •  webpack к этому не готов! •  – берем в руки лом =^_^=
  • 34. webpack – пакуем для сервера •  другие точки входа (нужно только приложение, используем *.web.js) •  единственный чанк на точку входа (убираем лишние) •  отделяем не-клиентский код (выбор точки подключения, externals) •  вырезаем стили (null-loader) •  чиним асинхронную загрузку (неприятный хак) •  source maps •  обоженуещеточто?!?!?!111 34
  • 35. dev сервер •  хотим перегружать при изменениях •  nodemon? – увы! (нужен шаг пересборки) •  делаем руками (gulp.watch(), process.spawn(), run-sequence, etc.) •  не забываем опцию cache для webpack •  делаем отключаемой (фронтенду удобнее перегружать явно) 35
  • 36. react – обрамление •  react плохо работает вне body •  нам нужна страница целиком! (для сервера и генератора страниц) •  шаблонизатор? – нет, снова react •  обрамление ← renderToStaticMarkup() (содержит placeholder) •  страница приложения ← renderToString() •  обрамление.replace(placeholder, страница) 36
  • 37. « React: CSS in JS » slides by Christopher "vjeux" Chedeau goo.gl/QVqwZp
  • 38. react – css in js •  а как же hover, after, media types, etc? •  css in js, но вычленять в css? – сложно и ненадежно •  гибридный подход •  легко сделать в js? → css in js •  проще в css? → stylus •  покомпонентные стили •  держим рядом с компонентом 38
  • 39. react – css in js? •  гибридный подход вернулись к stylus •  проще переносить существующий код •  css in js – много вопросов •  как перекрыть inline? (important) •  через js местами костыльно (media) •  нет/мало готовых инструментов •  боимся нарваться •  генерируем уникальные имена классов (загрузчик) 39
  • 40. react – данные •  flux? reflux? fluxor? … – история их рассудит •  EventEmitter (и немного дисциплины) •  хотим данных? – подписались на сервис •  хотим действие? – вызвали метод сервиса •  помним про CQRS (Command Query Responsibility Segregation) 40
  • 41. CQRS
  • 42. babel •  ES6-счастье! (умеет jsx, experimental=true) •  медленный? •  исключаем node_modules… (и ряд других каталогов) •  учим wap собирать саму себя (и любые другие либы тоже) •  source maps? 42
  • 43. « Lint Like It’s 2015 » article by Dan Abramov goo.gl/BPvSVY
  • 44. wap •  скоро будет в open source •  ориентирована на наши задачи •  все еще есть большие пробелы •  сборник проблем, решений и ответов на вопросы •  см. напр. default_settings*.js 44
  • 45. We are hiring! Text engine developer Google docs text engine Interface developer UI/UX, React, ES6 kigorw@grammarly.com
  • 46. react & webpack с помощью кирки, лома и какой-то матери Вопросы? Дмитрий Смолин & Дмитрий Филипенко, Grammarly dimsmol@gmail.com, wind.fd@gmail.com