Files
shiftcraft/.claude/skills/vite/references/rolldown-migration.md
2026-04-17 23:26:01 +00:00

2.7 KiB

name, description
name description
vite-rolldown Vite 8 Rolldown bundler and Oxc transformer migration

Rolldown Migration (Vite 8)

Vite 8 replaces esbuild+Rollup with Rolldown, a unified Rust-based bundler.

What Changed

Before (Vite 7) After (Vite 8)
esbuild (dev transform) Oxc Transformer
esbuild (dep pre-bundling) Rolldown
Rollup (production build) Rolldown
rollupOptions rolldownOptions
esbuild option oxc option

Performance Impact

  • 10-30x faster than Rollup for production builds
  • Matches esbuild's dev performance
  • Unified behavior between dev and build

Config Migration

rollupOptions → rolldownOptions

// Before (Vite 7)
export default defineConfig({
  build: {
    rollupOptions: {
      external: ['vue'],
      output: { globals: { vue: 'Vue' } },
    },
  },
})

// After (Vite 8)
export default defineConfig({
  build: {
    rolldownOptions: {
      external: ['vue'],
      output: { globals: { vue: 'Vue' } },
    },
  },
})

esbuild → oxc

// Before (Vite 7)
export default defineConfig({
  esbuild: {
    jsxFactory: 'h',
    jsxFragment: 'Fragment',
  },
})

// After (Vite 8)
export default defineConfig({
  oxc: {
    jsx: {
      runtime: 'classic',
      pragma: 'h',
      pragmaFrag: 'Fragment',
    },
  },
})

JSX Configuration

export default defineConfig({
  oxc: {
    jsx: {
      runtime: 'automatic',  // or 'classic'
      importSource: 'react', // for automatic runtime
    },
    jsxInject: `import React from 'react'`,  // auto-inject
  },
})

Custom Transform Targets

export default defineConfig({
  oxc: {
    include: ['**/*.ts', '**/*.tsx'],
    exclude: ['node_modules/**'],
  },
})

Plugin Compatibility

Most Vite plugins work unchanged. Rolldown supports Rollup's plugin API.

If a plugin only works during build:

{
  ...rollupPlugin(),
  enforce: 'post',
  apply: 'build',
}

New Capabilities

Rolldown unlocks features not possible before:

  • Full bundle mode (experimental)
  • Module-level persistent cache
  • More flexible chunk splitting
  • Module Federation support

Gradual Migration

For large projects, migrate via rolldown-vite first:

# Step 1: Test with rolldown-vite
pnpm add -D rolldown-vite

# Replace vite import in config
import { defineConfig } from 'rolldown-vite'

# Step 2: Once stable, upgrade to Vite 8
pnpm add -D vite@8

Overriding Vite in Frameworks

When framework depends on older Vite:

{
  "pnpm": {
    "overrides": {
      "vite": "8.0.0"
    }
  }
}