Webpack: основы и отличия от Vite

↑ 6.2 Сборка и инфраструктура: Vite, monorepo, CI∕CD · ← Предыдущая · → Следующая

Желательно~3 мин чтенияУровень: middle

Зачем это на собесе

Легаси-проекты на webpack встречаются; нужно знать ключевые понятия и отличия.

Объяснение

Ключевые понятия webpack:

ПонятиеСмысл
entryточка входа графа
outputкуда и как писать результат (filename: "[name].[contenthash].js")
loadersпреобразуют файлы (babel-loader, ts-loader, vue-loader, css-loader, sass-loader, asset modules)
pluginsрасширяют сборку (HtmlWebpackPlugin, MiniCssExtractPlugin, DefinePlugin, CopyPlugin, BundleAnalyzerPlugin)
modedevelopment/production (оптимизации)
optimizationsplitChunks, runtimeChunk, minimizer, usedExports
resolveалиасы, расширения
devServerHMR, прокси
Module Federationмикрофронтенды (шаринг модулей между сборками)
module.exports = {
  entry: "./src/main.ts",
  output: { path: path.resolve("dist"), filename: "[name].[contenthash:8].js", clean: true },
  module: { rules: [{ test: /\.vue$/, loader: "vue-loader" }, { test: /\.ts$/, loader: "ts-loader", options: { appendTsSuffixTo: [/\.vue$/] } }, { test: /\.scss$/, use: ["style-loader", "css-loader", "sass-loader"] }] },
  plugins: [new VueLoaderPlugin(), new HtmlWebpackPlugin({ template: "public/index.html" })],
  optimization: { splitChunks: { chunks: "all" } },
  devServer: { hot: true, historyApiFallback: true },
};
КритерийwebpackVite
Dev-стартсобирает весь бандл (медленнее на больших проектах)нативные ESM, мгновенный старт
HMRбыстро, но зависит от размера проектастабильно быстро
Конфигурациямощная, но сложная и многословнаяпроще, разумные значения по умолчанию
Экосистемаогромная, зрелая (loaders/plugins)быстро растёт, совместима с Rollup-плагинами
Prod-сборкаwebpackRollup/Rolldown
Module Federationнативноплагин (@originjs/vite-plugin-federation, native federation)
Легаси, кастомные пайплайнылучшехуже

Миграция на Vite: заменить vue-cli → vite, require → import, process.env.X → import.meta.env.VITE_X, алиасы, обработка ассетов (require("./img.png") → import/new URL), проверка плагинов; либо Rspack — практически drop-in замена webpack на Rust.

Нюансы и подводные камни

  • Конфигурация webpack легко раздувается: используйте webpack-merge для окружений.
  • Разные версии loaders/plugins конфликтуют.
  • Медленный dev на больших проектах: кэш (cache: { type: "filesystem" }), thread-loader, замена Babel на SWC/esbuild.
  • CommonJS-специфика (require, module.exports) при миграции.
  • Vue CLI в режиме поддержки — рекомендуется миграция на Vite.

Практика

  1. Прочитайте конфиг существующего webpack-проекта и опишите entry/loaders/plugins.
  2. Проанализируйте бандл через webpack-bundle-analyzer.
  3. Составьте план миграции на Vite.

Вопросы с ответами

Связанные темы