Был ли опыт написания конфигурации webpack с нуля?
Что проверяют
Понимаете ли вы, что происходит при сборке, или умеете только запускать готовый шаблон. Следом обычно просят объяснить разницу между loader и plugin, рассказать, как вы разделяли конфиг под разработку и прод и как ускоряли сборку.
Как отвечать
Это вопрос про опыт, поэтому опирайтесь на свой проект: что за приложение, зачем понадобился свой конфиг, что получилось. Цифры берите реальные: время сборки до и после, размер бандла. Каркас конфига, который стоит уметь рассказать:
- entry и output: точки входа и имена файлов с
[contenthash], чтобы браузер сбрасывал кэш только у изменившихся файлов; - module.rules:
babel-loaderилиswc-loaderдля JS и TS, для стилей цепочка[MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'], которая выполняется с конца массива; - asset modules: в webpack 5 картинки и шрифты идут через
type: 'asset/resource'и'asset',file-loaderиurl-loaderбольше не нужны; - plugins:
HtmlWebpackPlugin,MiniCssExtractPlugin,DefinePluginдля переменных окружения; - mode и devtool:
productionвключает минификацию черезTerserPluginи tree shaking, для разработкиdevServerс HMR и быстрые source maps; - optimization и cache:
splitChunksдля выноса vendor-кода,cache: { type: 'filesystem' }для повторных сборок.
Покажите контекст: новые проекты сейчас чаще стартуют на Vite, есть Rspack с совместимым с webpack API, а webpack живёт в крупных проектах со своей историей и там, где нужен Module Federation.
Если с нуля писать не приходилось, так и скажите и расскажите, что делали: правили готовый конфиг, добавляли лоадер, разбирались, почему вырос бандл. Честное «собирал на Vite, webpack знаю по чужим конфигам» лучше выдуманной истории.
Где спотыкаются
Не различают loader и plugin. Лоадер преобразует отдельный файл при импорте, плагин вмешивается во весь процесс сборки через хуки компилятора.
Говорят про tree shaking и не знают условий: нужны ES-модули и корректное поле sideEffects в package.json, иначе неиспользуемый код останется в бандле.
Рассказывают про ускорение сборки без цифр или с придуманными процентами, которые разваливаются на первом уточнении.