Грамотная сборка в продакшен с помощью Webpack. Как готовить?
Интро
Есть большой портал монстр-франкенштейн, много легаси-кода, ливнувших разработчиков. Проводить полный рефакторинг практически невозможно, да и "работает -- не трогай", особенно, когда человек, который писал код, уже уволился. Текущее положение дел
Одна часть системы полностью собирается webpack, написана на Marionette/Backbone с помощью ES6-модулей. С ней проблем нет. А вот остальной легаси-код и стили было бы неплохо прогонять через uglify/minify и postcss.
Новые элементы системы хотелось бы писать на es6/7.
В результате есть несколько webpack-конфигов под каждую часть системы, каждый из которых делает:
1. Сборку определенных js в папке, выделенной для подсистемы;
2. Сборку всех стилей (так как стили у нас глобальны и один большой бандл на все); Вопросы
1. Как реализовать систему итерации версий для стилей и других js-bundl'ов? Приходится вручную менять версию в url. Какой бы webpack-плагин или подход лучше бы делал это? (ведь писать придется еще в дополнительный php-файл, который запускает все стили и скрипты)
2. Так как частей системы много (больше 10), они вполне изолированы друг от друга (не считая стилей), конфигов будет много и очень схожих, как это дело лучше оптимизировать? (best-practice)
3. Какой еще набор инструментов/подходов/плагинов стоит использовать (не считая юнит-тестов) при таком подходе?
1. Не совсем понял проблему, в каком виде реализуются/должны реализоваться версии для файлов стилей и бандлов? В большинстве случаев достаточно брать хеш от файла и можно делать это средствами php.
2. Зависит от того на сколько схожи будут конфиги:
- Можно импортить конфиг из одного файла и переопределять необходимые параметры в других файлах;
- Можно значения некоторых параметров (напр., plugins, resolve, rules) выносить в отдельные константы и уже их импортить в различные файлы конфигов.
3. Стили можно собирать и gulp'ом, на мой взгляд это удобнее и быстрее.
И суть в том, чтобы эти v1.2 или хотя бы хеш файла сами вписывались. Вроде как можно было делать с помощью ExtractTextPlugin, но я не уверен в правильности.
По поводу второго -- спасибо)
По поводу третьего -- не согласен, вебпак стремительнее развивается, а делать два разных конфига чет такое себе.