ADR 008: Rsbuild/Rspack como bundler

Estado: Aceptado Fecha: 2025-03-15

Contexto

Necesitamos un bundler para construir micro frontends con React (^19.2.4) + TypeScript (^5.9.3) y soporte de Module Federation v2. La velocidad de build es importante para la experiencia de desarrollo (5-10 MFEs, builds frecuentes). El bundler debe soportar de forma nativa el sistema de plugins de Module Federation v2.

Decision

Usar Rsbuild (@rsbuild/core@^1.7.3, con @rsbuild/plugin-react@^1.4.1) construido sobre Rspack como herramienta de build y bundler para todos los micro frontends y la shell app.

Rsbuild / Rspack Rsbuild / Rspack Positivo Potenciado por Rust, 5-10x mas rapido Soporte nativo de MF v2 Compatible con webpack TS/CSS integrados Negativo Comunidad menos madura Algunos plugins webpack incompatibles Ecosistema de plugins mas reducido

Consecuencias

Positivas

  • Rspack esta escrito en Rust: 5-10x mas rapido que webpack para proyectos React tipicos
  • Soporte nativo de Module Federation v2: el plugin @module-federation/enhanced disenado para Rspack
  • Rsbuild proporciona una API de nivel superior sobre Rspack (similar a Create React App o Vite, pero con Rspack por debajo)
  • Ampliamente compatible con webpack: se pueden migrar configuraciones existentes de webpack con cambios minimos
  • Soporte integrado para TypeScript, CSS Modules, PostCSS, gestion de assets
  • Hot Module Replacement funciona bien para desarrollo local
  • Ecosistema en crecimiento y desarrollo activo por ByteDance
  • Soporta code splitting, tree shaking y todas las funcionalidades modernas de un bundler

Negativas

  • Mas nuevo y menos maduro que webpack (comunidad mas reducida, menos respuestas en Stack Overflow)
  • Algunos plugins de webpack pueden no ser compatibles (aunque los mas populares funcionan)
  • Rsbuild abstrae la configuracion de Rspack: ocasionalmente es necesario bajar a la configuracion raw de Rspack para casos de uso avanzados
  • La documentacion esta mejorando pero no es tan completa como la de webpack
  • La superficie de la API de plugins es mas reducida que la de webpack

Nota sobre Rsbuild 2.0

Rsbuild 2.0 esta actualmente en desarrollo, construido sobre Rspack 2.0. Los cambios clave anticipados incluyen:

  • Base Rspack 2.0: Rspack 2.0 busca mejorar tree shaking, module concatenation y el rendimiento general de build. Rsbuild 2.0 heredara estas mejoras automaticamente.
  • Posibles breaking changes: Las APIs de plugins y el esquema de configuracion pueden cambiar entre Rsbuild 1.x y 2.0. Revisar la guia de migracion cuando este disponible antes de actualizar.
  • Ruta de migracion: El equipo de Rsbuild se ha comprometido a proporcionar codemods y una guia de migracion para la transicion de 1.x a 2.0. Monitorizar el changelog de Rsbuild para anuncios de pre-release.
  • Recomendacion: Permanecer en @rsbuild/core@^1.7.3 para cargas de trabajo en produccion hasta que Rsbuild 2.0 alcance una release estable. Evaluar los release candidates de 2.0 en un MFE no critico primero antes de desplegar en todos los paquetes.

Alternativas consideradas

webpack 5

Probado en batalla, ecosistema enorme, Module Federation v1 nativo. Pero: tiempos de build lentos (10-30s+ para MFEs grandes), configuracion compleja, inversion de comunidad decreciente a medida que las alternativas maduran. MF v2 funciona con webpack pero esta disenado para Rspack.

Vite

Excelente DX, dev server rapido (ESM nativo). Pero: soporte de Module Federation via @originjs/vite-plugin-federation esta mantenido por la comunidad y es menos maduro. Los builds de produccion basados en Rollup no soportan de forma nativa el protocolo de manifest de MF v2. Requeriria workarounds significativos.

esbuild

Extremadamente rapido pero sin soporte nativo de Module Federation. Requeriria construir la funcionalidad de MF desde cero. Sin sistema de plugins comparable a webpack/Rspack.

Turbopack

Enfocado en Next.js, aun no estable para proyectos React generales. Sin soporte de Module Federation. Fuertemente acoplado al ecosistema Next.js.