SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Как внедрить Вебпак
Подводные камни, костыли и полученный опыт
Илья Зуб
Noosphere Ventures
1
Исходные данные
 183 компонента
 190 файлов Less
 428 файлов Jade (pug)
 718 файлов JS
 Все “классы” в глобальной области видимости
 Все сторонние библиотеки в нашем репозитории
 Самодельная система сборки
 Переводы в формате gettext (*.po)
2
Предыдущая система сборки
 Самодельная система сборки написанная на ПХП
 Конфигурационные файлы зависимостей
 grunt-webfont, grunt-contrib-jade; самоделка над spritesmith, less и postcss
 jsmin.c для минификации Джс, cssmin.php для ЦСС
 Обёртка над lazyload.js для отложенной загрузки
3
Почему существующая ситуация не подходит
 Нужно создать и поддерживать свою модульную систему
 Нужно создать и поддерживать свою систему сборки
 Без какой-либо модульной системы сложно отследить зависимости
между компонентами
 Все сторонние библиотеки в нашем репозитории, что искушает добавить
"немного" изменений прямо на месте
 В момент сборки не ясно, что и когда будет подключено на страницу
4
Модульные системы бывают разные
Browserify
Webpack
Require.js
Rollup.js
Jspm
Assetgraph
Brunch
Lasso
5
Почему вебпак
Умеет автоматически разделять результирующие файлы на части
Поддерживает отложенную загрузку из коробки
Есть инструменты для визуализации и анализа результирующих файлов
Умеет работать с CommonJS, AMD, UMD
Умеет работать с любыми типами файлов
Поддерживает Source Maps
Проблемы активно устраняют, помогают решить вопросы, экосистема развивается
Посмотреть сравнительную характеристику.
6
Алгоритм перехода
1. Добавить недостающие require() и module.exports
2. JST['<TemplateName>'] -> require('./<TemplateName>.jade')
3. Добавить @import “~styles/main.less” во все подключаемые стили
4. Добавить require('style.less') в шапки соответствующих файлов джейд
5. lazyload.load() -> require.ensure()
7
Добавить module.exports, используя jscodeshift
Добавить require(), используя ESList
Заменить обращения к шаблонам, используя регулярные выражения
К сожалению, изменения в отложенных загрузках и стилях нужно сделать
вручную.
Частичная автоматизация
8
Настройка вебпака
Сборка переводов - msgcat + po-loader
Спрайтинг - SpritesmithPlugin
Шрифтовые иконки - fontgen-loader
Загрузка модулей, которые вынесены в отдельные файлы - file-loader
Вынесение общих участков кода в отдельные файлы - CommonChunksPlugin
Вынесение ЦСС в отдельный файл - ExtractTextPlugin
Автоматическое импортирование модулей - ProvidePlugin
9
Настройка вебпака
Создание фавиконок - FaviconsPlugin
Создание файла хтмл с подключёнными ассетами - HtmlWebpackPlugin
Распараллеливание сборки - happypack
Минификация яваскрипта - UglifyJsPlugin
Сборка Less и применение PostCSS - less-loader + postcss-loader
Уменьшение размера результирующих файлов
Анализ размера файлов - BundleAnalyzerPlugin
Игнорирование модулей анализатором - module.noParse
Алиасы при подключении модулей - resolve.alias
Не генерировать модули для определённых путей - IgnorePlugin
Создание дополнительного файла и его отложенная загрузка
То же самое, что и пункт выше - bundle-loader
11
Уменьшение размера результирующих файлов
Анализатор и визуализация результатов сборки
Слияние похожих частей кода для уменьшения размера -
AggressiveMergingPlugin
Удаление похожих и одинаковых результирующих файлов - DedupePlugin
Отложенная загрузка
Контроллеры и экшны
Отображение чего-то большого по условию
Отображение чего-то по событию
13
Стало ли лучше?
Зависимости указаны явно в каждом файле
Появилась возможность использовать модули нпм
Появилась модульная система
Уменьшилось время сборки
Теперь можно написать юнит-тесты
Теперь можно применить ESLint и stylelint в гит коммит хуке и не
пропускать несоответствующие стилю задачи
14
Дальнейшие улучшения
Уменьшить размер бандла
Оптимизировать отложенные загрузки
Сжимать изображения и шрифты
Отображать заглушки изображений до их загрузки
Server-side rendering
Полноценно применить линтер для джаваскрипта
Не отдавать на клиент неиспользуемый ЦСС и джаваскрипт
15
Дополнительная информация
Учебник по вебпаку
Документация по вебпаку первой версии
Документация по вебпаку второй версии
Мои наработки по автоматической миграции кода
Вчера появился релиз-кандидат вебпака версии 2.2.0
16
Вопросы приветствуются
Slack - @ilyazub
Скайп - physx100500
Фейсбук
Вконтактик
Гитхаб
17

Weitere ähnliche Inhalte

Was ist angesagt?

«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
2ГИС Технологии
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
Yandex
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
MoscowJS
 

Was ist angesagt? (20)

Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людей
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
 
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
What do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptWhat do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScript
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
Moscow js 26 webpack
Moscow js 26   webpackMoscow js 26   webpack
Moscow js 26 webpack
 
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
 
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
 

Andere mochten auch

Andere mochten auch (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 - 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
 
Webpack DevTalk
Webpack DevTalkWebpack DevTalk
Webpack DevTalk
 
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
 

Ähnlich wie Webpack integration

Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
dddpaul
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Ontico
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
Alexander Makarov
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Nikolay Samokhvalov
 
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Ontico
 

Ähnlich wie Webpack integration (20)

Сборка Front-end’a
Сборка Front-end’aСборка Front-end’a
Сборка Front-end’a
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Aлексей Медведев, Alpari, «Enterprise-инфраструктура менеджмента PHP-пакетов ...
Aлексей Медведев, Alpari, «Enterprise-инфраструктура менеджмента PHP-пакетов ...Aлексей Медведев, Alpari, «Enterprise-инфраструктура менеджмента PHP-пакетов ...
Aлексей Медведев, Alpari, «Enterprise-инфраструктура менеджмента PHP-пакетов ...
 
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании (Aлексей ...
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании (Aлексей ...Enterprise-инфраструктура менеджмента php-пакетов в рамках компании (Aлексей ...
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании (Aлексей ...
 
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании
Enterprise-инфраструктура менеджмента php-пакетов в рамках компанииEnterprise-инфраструктура менеджмента php-пакетов в рамках компании
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании
 
Телепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup MinskТелепортация MODX - MODX Meetup Minsk
Телепортация MODX - MODX Meetup Minsk
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word press
 
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
 
Development and deployment freedom - MODX Meetup Minsk
Development and deployment freedom - MODX Meetup MinskDevelopment and deployment freedom - MODX Meetup Minsk
Development and deployment freedom - MODX Meetup Minsk
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Программируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusПрограммируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco Nexus
 
Phalcon. Что нового?
Phalcon. Что нового?Phalcon. Что нового?
Phalcon. Что нового?
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
 
Владимир Гриненко —Инструменты фронтенд-разработчика
Владимир Гриненко —Инструменты фронтенд-разработчикаВладимир Гриненко —Инструменты фронтенд-разработчика
Владимир Гриненко —Инструменты фронтенд-разработчика
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
 

Webpack integration

  • 1. Как внедрить Вебпак Подводные камни, костыли и полученный опыт Илья Зуб Noosphere Ventures 1
  • 2. Исходные данные  183 компонента  190 файлов Less  428 файлов Jade (pug)  718 файлов JS  Все “классы” в глобальной области видимости  Все сторонние библиотеки в нашем репозитории  Самодельная система сборки  Переводы в формате gettext (*.po) 2
  • 3. Предыдущая система сборки  Самодельная система сборки написанная на ПХП  Конфигурационные файлы зависимостей  grunt-webfont, grunt-contrib-jade; самоделка над spritesmith, less и postcss  jsmin.c для минификации Джс, cssmin.php для ЦСС  Обёртка над lazyload.js для отложенной загрузки 3
  • 4. Почему существующая ситуация не подходит  Нужно создать и поддерживать свою модульную систему  Нужно создать и поддерживать свою систему сборки  Без какой-либо модульной системы сложно отследить зависимости между компонентами  Все сторонние библиотеки в нашем репозитории, что искушает добавить "немного" изменений прямо на месте  В момент сборки не ясно, что и когда будет подключено на страницу 4
  • 5. Модульные системы бывают разные Browserify Webpack Require.js Rollup.js Jspm Assetgraph Brunch Lasso 5
  • 6. Почему вебпак Умеет автоматически разделять результирующие файлы на части Поддерживает отложенную загрузку из коробки Есть инструменты для визуализации и анализа результирующих файлов Умеет работать с CommonJS, AMD, UMD Умеет работать с любыми типами файлов Поддерживает Source Maps Проблемы активно устраняют, помогают решить вопросы, экосистема развивается Посмотреть сравнительную характеристику. 6
  • 7. Алгоритм перехода 1. Добавить недостающие require() и module.exports 2. JST['<TemplateName>'] -> require('./<TemplateName>.jade') 3. Добавить @import “~styles/main.less” во все подключаемые стили 4. Добавить require('style.less') в шапки соответствующих файлов джейд 5. lazyload.load() -> require.ensure() 7
  • 8. Добавить module.exports, используя jscodeshift Добавить require(), используя ESList Заменить обращения к шаблонам, используя регулярные выражения К сожалению, изменения в отложенных загрузках и стилях нужно сделать вручную. Частичная автоматизация 8
  • 9. Настройка вебпака Сборка переводов - msgcat + po-loader Спрайтинг - SpritesmithPlugin Шрифтовые иконки - fontgen-loader Загрузка модулей, которые вынесены в отдельные файлы - file-loader Вынесение общих участков кода в отдельные файлы - CommonChunksPlugin Вынесение ЦСС в отдельный файл - ExtractTextPlugin Автоматическое импортирование модулей - ProvidePlugin 9
  • 10. Настройка вебпака Создание фавиконок - FaviconsPlugin Создание файла хтмл с подключёнными ассетами - HtmlWebpackPlugin Распараллеливание сборки - happypack Минификация яваскрипта - UglifyJsPlugin Сборка Less и применение PostCSS - less-loader + postcss-loader
  • 11. Уменьшение размера результирующих файлов Анализ размера файлов - BundleAnalyzerPlugin Игнорирование модулей анализатором - module.noParse Алиасы при подключении модулей - resolve.alias Не генерировать модули для определённых путей - IgnorePlugin Создание дополнительного файла и его отложенная загрузка То же самое, что и пункт выше - bundle-loader 11
  • 12. Уменьшение размера результирующих файлов Анализатор и визуализация результатов сборки Слияние похожих частей кода для уменьшения размера - AggressiveMergingPlugin Удаление похожих и одинаковых результирующих файлов - DedupePlugin
  • 13. Отложенная загрузка Контроллеры и экшны Отображение чего-то большого по условию Отображение чего-то по событию 13
  • 14. Стало ли лучше? Зависимости указаны явно в каждом файле Появилась возможность использовать модули нпм Появилась модульная система Уменьшилось время сборки Теперь можно написать юнит-тесты Теперь можно применить ESLint и stylelint в гит коммит хуке и не пропускать несоответствующие стилю задачи 14
  • 15. Дальнейшие улучшения Уменьшить размер бандла Оптимизировать отложенные загрузки Сжимать изображения и шрифты Отображать заглушки изображений до их загрузки Server-side rendering Полноценно применить линтер для джаваскрипта Не отдавать на клиент неиспользуемый ЦСС и джаваскрипт 15
  • 16. Дополнительная информация Учебник по вебпаку Документация по вебпаку первой версии Документация по вебпаку второй версии Мои наработки по автоматической миграции кода Вчера появился релиз-кандидат вебпака версии 2.2.0 16
  • 17. Вопросы приветствуются Slack - @ilyazub Скайп - physx100500 Фейсбук Вконтактик Гитхаб 17

Hinweis der Redaktion

  1. Добрый вечер. Кто-то работал с вебпаком? Слышал о модульных системах? Зовут меня Илья Зуб. Сейчас активно приводим фронтенд в порядок и решили внедрить модульную систему. В первую очередь, рассказ ориентирован на тех, кто хочет заменить сборку Грантом или Гальпом на вебпак. Я рассмотрю тонкости настройки и необычные проблемы, с которыми мы столкнулись, ибо стандартные ситуации хорошо описаны на просторах интернета.
  2. В нашей системе имеется
  3. Наш фронтенд лежал в одном репозитории с бекендом. Сборка самодельная, ибо на момент создания системы не было никаких модульных систем. Частично применили грант. Исторически сложилось, что только частично.
  4. На самом деле, они чуть более, чем похожи. Есть сравнительная характеристика: https://webpack.js.org/get-started/why-webpack/#comparison Самая крутая фича вебпака, которая есть и в реквайр.джс, - поддержка отложенной загрузки автоматически сгенерированных частей кода из коробки.
  5. Так как все наши “классы” были в глобальной области видимости, то при переходе на модульную систему появилась необходимость импортирования зависимостей.
  6. Первые два пункта можно автоматизировать применив инструменты анализа и изменения кода, и регулярные выражения. Все желающие могут посмотреть реализацию на гитхабе.
  7. Советую использовать chunksSortMode: 'dependency' для хтмл вебпак плагин.
  8. У меня вышло так, что файлы джейд весят больше всего, ибо миксины - это вещь. А вообще, вышло уменьшить размер конечного бандла с 1,5 МБ до 840 КБ. Это 8 файлов. И это очень много. Дальнейшие работы будут вестись. Если кому-то будет интересно, то когда-нибудь сделаю продолжение рассказа об оптимизациях.
  9. Если у вас есть маршрутизация на клиенте, то советую вынести все контроллеры и экшны в отдельные файлы и загружать их отложенно. То же самое можно сделать и с отображением чего-то по событию или условию.
  10. Если у вас ещё нет модульной системы, то очень советую внедрить таковую.