Published on
Word count
451 字 · 阅读约 2 分钟

前端工程化:从 Webpack 到 Turbopack 的迁移指南

Authors
  • avatar
    Name
    眠月
    Twitter

为什么选择 Turbopack?

Turbopack 是 Vercel 基于 Rust 开发的新一代打包工具,专为 Next.js 优化:

指标WebpackTurbopack
冷启动时间~8s~1.5s
HMR 更新时间~200ms~15ms
生产构建~45s~18s
内存占用~1.2GB~600MB

数据基于中型 Next.js 项目 (100+ 组件)

迁移步骤

第一步:升级 Next.js

npm install next@latest react@latest react-dom@latest

第二步:启用 Turbopack

# 开发模式
next dev --turbo

# 或在 next.config.js 中配置
module.exports = {
  experimental: {
    turbo: {}
  }
}

第三步:处理不兼容的配置

Turbopack 不支持部分 Webpack 特有的配置:

// ❌ Webpack 特有 - 需要迁移
webpack: (config) => {
  config.plugins.push(new SomeWebpackPlugin())
  return config
}

// ✅ 使用 Turbopack 等效配置
module.exports = {
  transpilePackages: ['some-package'],
  experimental: {
    turbo: {
      rules: {
        '*.svg': {
          loaders: ['@svgr/webpack'],
          as: '*.js'
        }
      }
    }
  }
}

第四步:插件迁移

Webpack 插件Turbopack 替代
@svgr/webpack内置支持 (通过 turbo.rules)
raw-loader内置支持
bundle-analyzerANALYZE=true next build
copy-webpack-pluginpublic/ 目录自动复制

CSS 处理演进

从 webpack 时代的 PostCSS loader 到 Turbopack 的原生支持:

/* Tailwind CSS v4 + Turbopack */
@import 'tailwindcss';

@theme {
  --color-primary: oklch(0.585 0.194 277.128);
  --font-sans: 'Inter', system-ui, sans-serif;
}

Turbopack 原生理解 CSS @import,无需额外 loader 配置。

渐进式迁移策略

不需要一次性迁移整个项目:

  1. 先试开发环境:next dev --turbo
  2. 对比性能:记录冷启动、HMR 时间
  3. 处理兼容性问题:逐个解决不兼容的配置
  4. 启用生产构建:next build (默认使用 Turbopack)
  5. 监控线上表现:确认打包产物大小和运行时行为

常见问题

SVG 导入

// Turbopack 原生支持
import Logo from './logo.svg'

// 作为组件使用
<Logo className="h-8 w-8" />

环境变量

Turbopack 的处理方式与 Webpack 完全一致:

# .env.local
NEXT_PUBLIC_API_URL=https://api.example.com

性能对比实测

在一个 150+ 页面的 Next.js 博客项目中:

  • dev 启动:Webpack 9.2s → Turbopack 1.8s (↓80%)
  • HMR 更新:Webpack 180ms → Turbopack 12ms (↓93%)
  • 首次页面加载:Webpack 3.1s → Turbopack 1.2s (↓61%)

迁移成本约 2 小时,投资回报率极高。