12. Локальные проблемы проектов
• Зависимости
• Загружены ли стили?
• А шаблоны?
• А библиотека?
• А нужный jQuery-плагин?
• А локализация для него?
• А стили?…
12
13. Локальные проблемы проектов
• Версии
• Один плагин требует jQuery 1.8
• Второй плагин требует jQuery 2.1
• Что делать?
13
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
32. API для плагинов
• Логика сборки и поиска модулей
• Самое сердце процесса
• Рассмотрим примеры:
• DefinePlugin
• BowerWebpackPlugin
• ExtractTextPlugin
32
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
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
52. Так можно доверять?
• Команда Facebook использует webpack для веб-
интерфейса Instagram
• Twitter использует webpack для своих проектов
(Fronteers 2014, Nicholas Gallagher)
52
53. Заключение
• Глобальные проблемы веб-разработки
• Многообразие, версия, форматов
• Локальные проблемы проектов
• Функциональный и технологический рост
• Управление зависимостями и версиями
• Решение
• CommonJS и webpack
53