SlideShare a Scribd company logo
1 of 55
Download to read offline
webpack 
7 бед - один ответ 
Денис Измайлов 
Ведущий разработчик 
Компания Netris 27 ноября 2014
• CommonJS? 
• AMD? 
• Require.js? 
• Browserify?
Начнём издалека
Начало 
• Глобальные проблемы веб-разработки 
• Локальные проблемы проектов 
• Способы решения 
4
Глобальные проблемы веб-разработки 
• Многообразие решений 
• Версии 
• Форматы 
5
Глобальные проблемы веб-разработки 
1. Многообразие решений (одних и тех же задач) 
• jQuery/Angular/React 
• Underscore/lodash/Lazy 
• MVC/MVVM/Flux 
6
Глобальные проблемы веб-разработки 
2. Версии 
• 1.8 
• 2.1 
• 3.2 
• 4.5 
• …10, 24, 38… 
7
Глобальные проблемы веб-разработки 
3. Форматы (пре-процессинг) 
• LESS, SCSS, Stylus, … 
• Handlebars, jade, EJS, … 
8
Локальные проблемы проектов 
• Сложность роста 
• Функциональная 
• Технологическая 
• Зависимости 
• Версии 
9
Локальные проблемы проектов 
• Функциональный рост 
• Регистрация 
• Личный кабинет 
• Загрузка фотографий 
• Аналитика 
• Поддержка языков 
10
Локальные проблемы проектов 
• Технологический рост 
• Bootstrap 
• jQuery 
• Knockout 
• Handlebars 
• React 
11
Локальные проблемы проектов 
• Зависимости 
• Загружены ли стили? 
• А шаблоны? 
• А библиотека? 
• А нужный jQuery-плагин? 
• А локализация для него? 
• А стили?… 
12
Локальные проблемы проектов 
• Версии 
• Один плагин требует jQuery 1.8 
• Второй плагин требует jQuery 2.1 
• Что делать? 
13
Способ решения 
Изолированные модули 
14
Реализации 
• AMD 
• CommonJS 
15
AMD 
• Asynchronous Module Definition 
• Пример 1: 
define(["jquery"], function ($) { 
return { 
// … 
}; 
}); 
16
AMD 
• Asynchronous Module Definition 
• Пример 2 (CommonJS wrapping): 
define(function (require, module, exports) { 
var $ = require("jquery"); 
module.exports = { 
// … 
}; 
}); 
17
CommonJS 
• www.commonjs.org 
• Нативно в Node.js/Rhino 
• Пример: 
var $ = require("jquery"); 
module.exports = { 
// … 
}; 
18
CommonJS 
Преимущества перед AMD: 
• читабельность 
• “писабельность” 
• изоморфизм: 
var _ = require("lodash"); 
var data = require("./stock.json"); 
module.exports = _.where(data, function (item) { 
return item[‘count’] > 0; 
}); 
19
AMD & CommonJS 
• создавать изолированные модули 
• использовать их 
• не думать о порядке загрузки 
• подключать любую статику 
• собирать всё в один JS-файл 
• использовать разные версии библиотек 
20
Итого 
• Глобальные проблемы веб-разработки 
• многообразие решения, версии, форматы 
• Локальные проблемы проектов 
• функциональный и технологический 
• управление зависимостями и версиями 
• Способы решения 
• AMD 
• CommonJS - лучшее 
21
Так что же теперь?
Что воплотит наши 
фантазии в жизнь?
Что лучшее мы имеем 
на сегодняшний день?
Любая логика
Любые форматы
Ваш проект быстро 
собирается
Ваш проект быстро 
запускается
Cамые современные 
инструменты разработки
webpack 
• Плагины 
• Загрузчики 
• Асинхронная сборка 
• Чанки (chunks) 
• Инструменты разработки 
31
API для плагинов 
• Логика сборки и поиска модулей 
• Самое сердце процесса 
• Рассмотрим примеры: 
• DefinePlugin 
• BowerWebpackPlugin 
• ExtractTextPlugin 
32
DefinePlugin 
• Определение констант 
• Настройка: 
… 
plugins: [ 
DefinePlugin({ 
"NODE_ENV": "production" 
}) 
… 
33
DefinePlugin 
• Определение констант 
• Использование: 
if (NODE_ENV === "development") { 
console.log("Debug info"); 
} 
if (NODE_ENV === "production") { 
console.log("App started"); 
} 
34
DefinePlugin 
• Определение констант 
• Собранный код: 
if ("production" === "development") { 
console.log("Debug info"); 
} 
if ("production" === "production") { 
console.log("App started"); 
} 
• После минификации: 
console.log("App started"); 
35
BowerWebpackPlugin 
• Прозрачное использование bower-компонент 
• Настройка: 
… 
plugins: [ 
new BowerWebpackPlugin({ 
modulesDirectories: ["bower_components"], 
manifestFiles: ["bower.json"], 
includes: /.*/, 
excludes: /.*.less$/ 
}) 
… 
36
BowerWebpackPlugin 
• Прозрачное использование bower-компонент 
• Использование: 
$ bower install jquery —save 
в коде: 
var $ = require("jquery"); 
$("body").html("Hello MoscowJS!"); 
• Уже более 20000 пакетов 
37
ExtractTextPlugin 
• Позволяет извлекать данные и собирать их в один файл 
• Настройка: 
… 
module: { 
loaders: { 
test: /.css$/, 
loader: ExtractTextPlugin.extract("style-loader", 
"css-loader") 
} 
}, 
plugins: [ 
new ExtractTextPlugin("style.css") 
] 
… 
38
Загрузчики 
• Прозрачное подключение статики: 
• JSON 
• CoffeeScript, 
• Handlebars/jade/EJS, … 
• CSS/LESS/SASS/Stylus и т.д. 
39
Загрузчики 
Настройка: 
… 
module: { 
loaders: [ 
{ test: /.css$/, loader: "style-loader!css-loader"}, 
{ test: /.json$/, loader: "json-loader"}, 
{ test: /.hbs$/, loader: "handlebars-loader"}, 
{ test: /.coffee$/, loader: "coffee-loader"}, 
{ 
test: /.(eot|woff|ttf|svg|png|jpg)$/, 
loader: "url-loader?limit=30000" + 
"&name=[name]-[hash].[ext]" 
}, 
] 
} 
… 
40
Загрузчики 
Использование: 
var $ = require("jquery"); 
var pageTemplate = require("./page.hbs"); 
var offices = require("./offices.json"); 
require("bootstrap/bootstrap.min.css"); 
require("./page.css"); 
$("#content").html(pageTemplate(offices)); 
41
Пример подключения JSX 
Установка: 
$ npm install jsx-loader —save-dev 
42
Пример подключения JSX 
Настройка: 
resolve: { 
extensions: ["", ".js", ".jsx"], 
}, 
module: { 
loaders: [ 
{ test: /.jsx$/, loader: "jsx-loader"} 
] 
} 
… 
43
Пример подключения JSX 
Использование: 
var React = require("react"); 
// loads toolbar.jsx 
var Toolbar = require("./toolbar"); 
React.render( 
React.createElement(Toolbar, null), 
document.getElementById("toolbar") 
); 
44
webpack-dev-server 
• Инструмент для ускорения разработки 
• Автоматическое обновления страницы без 
пересборки проекта 
• Можно запускать, как модуль или CLI 
45
webpack-dev-server 
• Как это работает: 
• Веб-сервер на основе assets-директории 
• При подключении файла-сборки, 
устанавливает соединение через socket.io 
• Как только что-то изменилось - 
автоматически обновляется страница 
46
Hot Module Replacement 
• Обновления изменённых частей в реальном 
времени 
• Без перезагрузки страниц 
• Это опция webpack-dev-server 
47
Hot Module Replacement 
Как это работает с React: 
• В окне IDE изменяете код компонента 
• В это время через открытое socket-соединение 
передаётся информация об изменённой части 
• Происходит “горячая” замена компонента 
(unmount + mount) 
• На странице обновляется только компонент 
48
Итого 
• AMD и CommonJS 
• Более 30 готовых плагинов 
• Более 50 готовых загрузчиков 
• Асинхронной сборка 
• Чанки (chunks) 
• Развитые инструменты разработки 
49
Были ли альтернативы? 
• 2009 - Require.js 
• 2010 - Browserify 
• 2012 - webpack 
50
Как насчёт поддержки? 
• Высокая активность разработчиков 
• Коммиты в github: 
51
Так можно доверять? 
• Команда Facebook использует webpack для веб- 
интерфейса Instagram 
• Twitter использует webpack для своих проектов 
(Fronteers 2014, Nicholas Gallagher) 
52
Заключение 
• Глобальные проблемы веб-разработки 
• Многообразие, версия, форматов 
• Локальные проблемы проектов 
• Функциональный и технологический рост 
• Управление зависимостями и версиями 
• Решение 
• CommonJS и webpack 
53
Документация и примеры: 
http://webpack.github.io
Вопросы? 
webpack: 7 бед - один ответ 
Денис Измайлов 
http://www.facebook.com/denis.izmaylov 
http://www.github.com/DenisIzmaylov

More Related Content

What's hot

Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковDevDay
 
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил РеенкоJSib
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов2ГИС Технологии
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Ontico
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)Ontico
 
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...Омские ИТ-субботники
 
МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016Anastasia Goryacheva
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложенияDenis Latushkin
 
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Ontico
 
Moscow js 26 webpack
Moscow js 26   webpackMoscow js 26   webpack
Moscow js 26 webpacklgordey
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
#5 "React.js" Антон Артамонов
#5 "React.js" Антон Артамонов#5 "React.js" Антон Артамонов
#5 "React.js" Антон АртамоновJSib
 
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"Fwdays
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"oelifantiev
 
Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Vladimir Malyk
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без болиAnton Piskunov
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptAlexey Ivanov
 

What's hot (20)

Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
 
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
 
МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016МРТ для данных, Frontend Conf 2016
МРТ для данных, Frontend Conf 2016
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
 
Moscow js 26 webpack
Moscow js 26   webpackMoscow js 26   webpack
Moscow js 26 webpack
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
#5 "React.js" Антон Артамонов
#5 "React.js" Антон Артамонов#5 "React.js" Антон Артамонов
#5 "React.js" Антон Артамонов
 
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
 

Viewers also liked

DotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + reactDotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + reactChen-Tien Tsai
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответDenis Izmaylov
 
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaWebpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaMarcin Gajda
 
MoscowJS 26 webpack presentation
MoscowJS 26 webpack presentationMoscowJS 26 webpack presentation
MoscowJS 26 webpack presentationlgordey
 
Webpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JSWebpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JSEmil Öberg
 
Webpack Introduction
Webpack IntroductionWebpack Introduction
Webpack IntroductionAnjali Chawla
 
TDC2016SP - Esqueça Grunt ou Gulp. Webpack and NPM rule them all!
TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!
TDC2016SP - Esqueça Grunt ou Gulp. Webpack and NPM rule them all!tdc-globalcode
 
Integrating tornado and webpack
Integrating tornado and webpackIntegrating tornado and webpack
Integrating tornado and webpackTom Chen
 
TDC2016SP - Trilha Fintech
TDC2016SP - Trilha FintechTDC2016SP - Trilha Fintech
TDC2016SP - Trilha Fintechtdc-globalcode
 
webpack 101 slides
webpack 101 slideswebpack 101 slides
webpack 101 slidesmattysmith
 
Bundle your modules with Webpack
Bundle your modules with WebpackBundle your modules with Webpack
Bundle your modules with WebpackJake Peyser
 
Packing for the Web with Webpack
Packing for the Web with WebpackPacking for the Web with Webpack
Packing for the Web with WebpackThiago Temple
 
Webpack - просто о сложном
Webpack -  просто о сложномWebpack -  просто о сложном
Webpack - просто о сложномTatiana Sakharova
 
webpack 入門
webpack 入門webpack 入門
webpack 入門Anna Su
 
Webpack
Webpack Webpack
Webpack DataArt
 

Viewers also liked (19)

DotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + reactDotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + react
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
 
Hey webpack
Hey webpackHey webpack
Hey webpack
 
Webpack DevTalk
Webpack DevTalkWebpack DevTalk
Webpack DevTalk
 
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaWebpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
 
MoscowJS 26 webpack presentation
MoscowJS 26 webpack presentationMoscowJS 26 webpack presentation
MoscowJS 26 webpack presentation
 
Webpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JSWebpack Tutorial, Uppsala JS
Webpack Tutorial, Uppsala JS
 
Webpack Introduction
Webpack IntroductionWebpack Introduction
Webpack Introduction
 
Webpack
WebpackWebpack
Webpack
 
TDC2016SP - Esqueça Grunt ou Gulp. Webpack and NPM rule them all!
TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!
TDC2016SP - Esqueça Grunt ou Gulp. Webpack and NPM rule them all!
 
Integrating tornado and webpack
Integrating tornado and webpackIntegrating tornado and webpack
Integrating tornado and webpack
 
TDC2016SP - Trilha Fintech
TDC2016SP - Trilha FintechTDC2016SP - Trilha Fintech
TDC2016SP - Trilha Fintech
 
webpack 101 slides
webpack 101 slideswebpack 101 slides
webpack 101 slides
 
Webpack slides
Webpack slidesWebpack slides
Webpack slides
 
Bundle your modules with Webpack
Bundle your modules with WebpackBundle your modules with Webpack
Bundle your modules with Webpack
 
Packing for the Web with Webpack
Packing for the Web with WebpackPacking for the Web with Webpack
Packing for the Web with Webpack
 
Webpack - просто о сложном
Webpack -  просто о сложномWebpack -  просто о сложном
Webpack - просто о сложном
 
webpack 入門
webpack 入門webpack 入門
webpack 入門
 
Webpack
Webpack Webpack
Webpack
 

Similar to "Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17

What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012InTRUEdeR
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?buranLcme
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Ontico
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
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
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Mikhail Davydov
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETDev2Dev
 
Модульная структура
Модульная структураМодульная структура
Модульная структураDenis Tsvettsih
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Решения сообщества для SharePoint
Решения сообщества для SharePointРешения сообщества для SharePoint
Решения сообщества для SharePointVitaly Baum
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
 
Cовременный станок верстальщика
Cовременный станок верстальщикаCовременный станок верстальщика
Cовременный станок верстальщикаmcslayer
 

Similar to "Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17 (20)

What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
 
Модульная структура
Модульная структураМодульная структура
Модульная структура
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
RequireJS і Magento 2
RequireJS і Magento 2RequireJS і Magento 2
RequireJS і Magento 2
 
Решения сообщества для SharePoint
Решения сообщества для SharePointРешения сообщества для SharePoint
Решения сообщества для SharePoint
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Cовременный станок верстальщика
Cовременный станок верстальщикаCовременный станок верстальщика
Cовременный станок верстальщика
 

More from MoscowJS

Александр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionАлександр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionMoscowJS
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIMoscowJS
 
Favicon на стероидах
Favicon на стероидахFavicon на стероидах
Favicon на стероидахMoscowJS
 
E2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийE2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийMoscowJS
 
Reliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkeyReliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkeyMoscowJS
 
Basis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkBasis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkMoscowJS
 
Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31MoscowJS
 
Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31MoscowJS
 
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31MoscowJS
 
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31MoscowJS
 
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33MoscowJS
 
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33MoscowJS
 
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33MoscowJS
 
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...MoscowJS
 
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...MoscowJS
 
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29MoscowJS
 
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29MoscowJS
 
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29MoscowJS
 
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28MoscowJS
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27MoscowJS
 

More from MoscowJS (20)

Александр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionАлександр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in action
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public API
 
Favicon на стероидах
Favicon на стероидахFavicon на стероидах
Favicon на стероидах
 
E2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийE2E-тестирование мобильных приложений
E2E-тестирование мобильных приложений
 
Reliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkeyReliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkey
 
Basis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkBasis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA Framework
 
Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31
 
Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31
 
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
 
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
 
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
 
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
 
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
 
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
 
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
 
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
 
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
 
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
 
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27
 

"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17

  • 1. webpack 7 бед - один ответ Денис Измайлов Ведущий разработчик Компания Netris 27 ноября 2014
  • 2. • CommonJS? • AMD? • Require.js? • Browserify?
  • 4. Начало • Глобальные проблемы веб-разработки • Локальные проблемы проектов • Способы решения 4
  • 5. Глобальные проблемы веб-разработки • Многообразие решений • Версии • Форматы 5
  • 6. Глобальные проблемы веб-разработки 1. Многообразие решений (одних и тех же задач) • jQuery/Angular/React • Underscore/lodash/Lazy • MVC/MVVM/Flux 6
  • 7. Глобальные проблемы веб-разработки 2. Версии • 1.8 • 2.1 • 3.2 • 4.5 • …10, 24, 38… 7
  • 8. Глобальные проблемы веб-разработки 3. Форматы (пре-процессинг) • LESS, SCSS, Stylus, … • Handlebars, jade, EJS, … 8
  • 9. Локальные проблемы проектов • Сложность роста • Функциональная • Технологическая • Зависимости • Версии 9
  • 10. Локальные проблемы проектов • Функциональный рост • Регистрация • Личный кабинет • Загрузка фотографий • Аналитика • Поддержка языков 10
  • 11. Локальные проблемы проектов • Технологический рост • Bootstrap • jQuery • Knockout • Handlebars • React 11
  • 12. Локальные проблемы проектов • Зависимости • Загружены ли стили? • А шаблоны? • А библиотека? • А нужный jQuery-плагин? • А локализация для него? • А стили?… 12
  • 13. Локальные проблемы проектов • Версии • Один плагин требует jQuery 1.8 • Второй плагин требует jQuery 2.1 • Что делать? 13
  • 15. Реализации • AMD • CommonJS 15
  • 16. AMD • Asynchronous Module Definition • Пример 1: define(["jquery"], function ($) { return { // … }; }); 16
  • 17. AMD • Asynchronous Module Definition • Пример 2 (CommonJS wrapping): define(function (require, module, exports) { var $ = require("jquery"); module.exports = { // … }; }); 17
  • 18. CommonJS • www.commonjs.org • Нативно в Node.js/Rhino • Пример: var $ = require("jquery"); module.exports = { // … }; 18
  • 19. CommonJS Преимущества перед AMD: • читабельность • “писабельность” • изоморфизм: var _ = require("lodash"); var data = require("./stock.json"); module.exports = _.where(data, function (item) { return item[‘count’] > 0; }); 19
  • 20. AMD & CommonJS • создавать изолированные модули • использовать их • не думать о порядке загрузки • подключать любую статику • собирать всё в один JS-файл • использовать разные версии библиотек 20
  • 21. Итого • Глобальные проблемы веб-разработки • многообразие решения, версии, форматы • Локальные проблемы проектов • функциональный и технологический • управление зависимостями и версиями • Способы решения • AMD • CommonJS - лучшее 21
  • 22. Так что же теперь?
  • 23. Что воплотит наши фантазии в жизнь?
  • 24. Что лучшее мы имеем на сегодняшний день?
  • 25.
  • 28. Ваш проект быстро собирается
  • 29. Ваш проект быстро запускается
  • 31. webpack • Плагины • Загрузчики • Асинхронная сборка • Чанки (chunks) • Инструменты разработки 31
  • 32. API для плагинов • Логика сборки и поиска модулей • Самое сердце процесса • Рассмотрим примеры: • DefinePlugin • BowerWebpackPlugin • ExtractTextPlugin 32
  • 33. DefinePlugin • Определение констант • Настройка: … plugins: [ DefinePlugin({ "NODE_ENV": "production" }) … 33
  • 34. DefinePlugin • Определение констант • Использование: if (NODE_ENV === "development") { console.log("Debug info"); } if (NODE_ENV === "production") { console.log("App started"); } 34
  • 35. DefinePlugin • Определение констант • Собранный код: if ("production" === "development") { console.log("Debug info"); } if ("production" === "production") { console.log("App started"); } • После минификации: console.log("App started"); 35
  • 36. BowerWebpackPlugin • Прозрачное использование bower-компонент • Настройка: … plugins: [ new BowerWebpackPlugin({ modulesDirectories: ["bower_components"], manifestFiles: ["bower.json"], includes: /.*/, excludes: /.*.less$/ }) … 36
  • 37. BowerWebpackPlugin • Прозрачное использование bower-компонент • Использование: $ bower install jquery —save в коде: var $ = require("jquery"); $("body").html("Hello MoscowJS!"); • Уже более 20000 пакетов 37
  • 38. ExtractTextPlugin • Позволяет извлекать данные и собирать их в один файл • Настройка: … module: { loaders: { test: /.css$/, loader: ExtractTextPlugin.extract("style-loader", "css-loader") } }, plugins: [ new ExtractTextPlugin("style.css") ] … 38
  • 39. Загрузчики • Прозрачное подключение статики: • JSON • CoffeeScript, • Handlebars/jade/EJS, … • CSS/LESS/SASS/Stylus и т.д. 39
  • 40. Загрузчики Настройка: … module: { loaders: [ { test: /.css$/, loader: "style-loader!css-loader"}, { test: /.json$/, loader: "json-loader"}, { test: /.hbs$/, loader: "handlebars-loader"}, { test: /.coffee$/, loader: "coffee-loader"}, { test: /.(eot|woff|ttf|svg|png|jpg)$/, loader: "url-loader?limit=30000" + "&name=[name]-[hash].[ext]" }, ] } … 40
  • 41. Загрузчики Использование: var $ = require("jquery"); var pageTemplate = require("./page.hbs"); var offices = require("./offices.json"); require("bootstrap/bootstrap.min.css"); require("./page.css"); $("#content").html(pageTemplate(offices)); 41
  • 42. Пример подключения JSX Установка: $ npm install jsx-loader —save-dev 42
  • 43. Пример подключения JSX Настройка: resolve: { extensions: ["", ".js", ".jsx"], }, module: { loaders: [ { test: /.jsx$/, loader: "jsx-loader"} ] } … 43
  • 44. Пример подключения JSX Использование: var React = require("react"); // loads toolbar.jsx var Toolbar = require("./toolbar"); React.render( React.createElement(Toolbar, null), document.getElementById("toolbar") ); 44
  • 45. webpack-dev-server • Инструмент для ускорения разработки • Автоматическое обновления страницы без пересборки проекта • Можно запускать, как модуль или CLI 45
  • 46. webpack-dev-server • Как это работает: • Веб-сервер на основе assets-директории • При подключении файла-сборки, устанавливает соединение через socket.io • Как только что-то изменилось - автоматически обновляется страница 46
  • 47. Hot Module Replacement • Обновления изменённых частей в реальном времени • Без перезагрузки страниц • Это опция webpack-dev-server 47
  • 48. Hot Module Replacement Как это работает с React: • В окне IDE изменяете код компонента • В это время через открытое socket-соединение передаётся информация об изменённой части • Происходит “горячая” замена компонента (unmount + mount) • На странице обновляется только компонент 48
  • 49. Итого • AMD и CommonJS • Более 30 готовых плагинов • Более 50 готовых загрузчиков • Асинхронной сборка • Чанки (chunks) • Развитые инструменты разработки 49
  • 50. Были ли альтернативы? • 2009 - Require.js • 2010 - Browserify • 2012 - webpack 50
  • 51. Как насчёт поддержки? • Высокая активность разработчиков • Коммиты в github: 51
  • 52. Так можно доверять? • Команда Facebook использует webpack для веб- интерфейса Instagram • Twitter использует webpack для своих проектов (Fronteers 2014, Nicholas Gallagher) 52
  • 53. Заключение • Глобальные проблемы веб-разработки • Многообразие, версия, форматов • Локальные проблемы проектов • Функциональный и технологический рост • Управление зависимостями и версиями • Решение • CommonJS и webpack 53
  • 55. Вопросы? webpack: 7 бед - один ответ Денис Измайлов http://www.facebook.com/denis.izmaylov http://www.github.com/DenisIzmaylov