前端构建工具深度对比:Webpack、Vite、Turbopack 与 Rspack 实战评测

By | 2026年7月29日

引言

随着前端项目规模的增长,构建工具的选择直接影响开发效率和用户体验。Webpack 作为老牌工具,生态成熟但速度瓶颈明显;Vite 凭借 ESM 和 esbuild 实现秒级启动;Turbopack 和 Rspack 则分别由 Vercel 和字节跳动推出,主打高性能。本文将通过一个实际项目,对比这四款工具的配置、构建速度、HMR 体验及插件生态,并给出选型建议。

项目初始化与配置

我们创建一个简单的 React + TypeScript 项目,包含路由、状态管理和样式模块,模拟中等复杂度场景。

1. 项目结构


my-app/
├── src/
│   ├── components/
│   │   └── Button.tsx
│   ├── pages/
│   │   ├── Home.tsx
│   │   └── About.tsx
│   ├── App.tsx
│   ├── main.tsx
│   └── styles/
│       └── global.css
├── package.json
└── tsconfig.json

2. 公共依赖


{
  "dependencies": {
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-router-dom": "^6.20.0"
  },
  "devDependencies": {
    "typescript": "^5.3.0",
    "@types/react": "^18.2.0",
    "@types/react-dom": "^18.2.0"
  }
}

各工具配置与构建

Webpack

安装依赖:


npm install --save-dev webpack webpack-cli webpack-dev-server html-webpack-plugin ts-loader css-loader style-loader

webpack.config.js


const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  mode: 'development',
  entry: './src/main.tsx',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js',
  },
  resolve: {
    extensions: ['.tsx', '.ts', '.js'],
  },
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        use: 'ts-loader',
        exclude: /node_modules/,
      },
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader'],
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({ template: './index.html' }),
  ],
  devServer: {
    port: 3000,
    hot: true,
  },
};

Vite

安装依赖:


npm install --save-dev vite @vitejs/plugin-react

vite.config.ts


import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  server: { port: 3000 },
});

Turbopack

Turbopack 目前作为 Next.js 的底层,独立使用需通过 Next.js 或实验性 CLI。我们使用 Next.js 来体验:

初始化 Next.js 项目:


npx create-next-app@latest my-app --typescript --turbo

配置 next.config.js


/** @type {import('next').NextConfig} */
const nextConfig = {
  experimental: {
    turbo: {},
  },
};

module.exports = nextConfig;

Rspack

安装依赖:


npm install --save-dev @rspack/cli @rspack/core @rspack/plugin-react-refresh

rspack.config.js


const { defineConfig } = require('@rspack/cli');
const { ReactRefreshPlugin } = require('@rspack/plugin-react-refresh');

module.exports = defineConfig({
  entry: './src/main.tsx',
  output: { path: './dist' },
  resolve: {
    extensions: ['.tsx', '.ts', '.js'],
  },
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        use: {
          loader: 'builtin:swc-loader',
          options: {
            jsc: {
              parser: { syntax: 'typescript', tsx: true },
              transform: { react: { runtime: 'automatic' } },
            },
          },
        },
      },
      {
        test: /\.css$/,
        use: ['builtin:css-loader', 'builtin:style-loader'],
      },
    ],
  },
  plugins: [new ReactRefreshPlugin()],
  devServer: { port: 3000 },
});

性能对比

使用相同的项目代码,在 MacBook Pro M1 16GB 上测试。

首次构建时间(冷启动)

| 工具 | 构建时间 (秒) | |————|—————| | Webpack | 12.3 | | Vite | 2.1 | | Turbopack | 1.8 | | Rspack | 1.5 |

热更新 (HMR) 延迟

修改 Button.tsx 的样式,记录更新到浏览器渲染的时间:

| 工具 | HMR 延迟 (ms) | |————|—————| | Webpack | 180 | | Vite | 45 | | Turbopack | 30 | | Rspack | 25 |

生产构建(开启压缩)

| 工具 | 构建时间 (秒) | 产物大小 (KB) | |————|—————|—————| | Webpack | 45.2 | 245 | | Vite | 18.6 | 238 | | Turbopack | 12.3 | 240 | | Rspack | 10.1 | 232 |

> 💡 注意:Turbopack 目前仅支持 Next.js 项目,独立使用受限。Rspack 对 Webpack 插件兼容性较好,迁移成本低。

开发体验与生态

  • Webpack:配置繁琐,但插件和 loader 最丰富,适合复杂场景。
  • Vite:开箱即用,HMR 极快,但生产构建依赖 Rollup,大型项目可能遇到性能瓶颈。
  • Turbopack:由 Rust 编写,速度最快,但生态尚不成熟,目前仅适配 Next.js。
  • Rspack:兼容 Webpack 插件,迁移简单,性能接近 Turbopack,且可独立使用。

迁移实践:从 Webpack 到 Rspack

假设我们有一个现有 Webpack 项目,迁移到 Rspack 只需几步:

  1. 安装 Rspack 相关包。
  2. 替换 webpack.config.jsrspack.config.js,注意 loader 名称变化(如 ts-loaderbuiltin:swc-loader)。
  3. 调整插件:部分 Webpack 插件可直接使用,如 HtmlWebpackPlugin,但需安装对应版本。
  4. 运行 npx rspack dev 启动开发服务器。

示例:使用 HtmlWebpackPlugin 在 Rspack 中:


const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  // ...
  plugins: [new HtmlWebpackPlugin({ template: './index.html' })],
};

> 💡 踩坑:Rspack 目前不支持部分 Webpack 插件(如 MiniCssExtractPlugin),需使用 Rspack 内置方案或等待社区支持。

选型建议

  • 新项目:优先 Vite,社区活跃,配置简单。若追求极致性能,可选 Rspack。
  • 现有 Webpack 项目:若迁移成本敏感,选 Rspack;若想尝试新技术,可逐步迁移至 Vite。
  • Next.js 项目:使用 Turbopack 获得最佳体验。
  • 大型企业级项目:Webpack 仍是最稳妥选择,生态成熟。

总结

本文通过实际项目对比了 Webpack、Vite、Turbopack 和 Rspack 的性能与配置。Vite 和 Rspack 是目前最值得关注的新生代工具,Turbopack 未来可期,Webpack 则依然坚固。选择时需根据项目需求、团队熟悉度和迁移成本综合考量。

延伸阅读

希望本文能帮助你做出明智的构建工具选型。