ADR 008: Rsbuild/Rspack como bundler
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.
Decisión
Usar Rsbuild (@rsbuild/core@^1.7.3, con @rsbuild/plugin-react@^1.4.5) construido sobre Rspack como herramienta de build y bundler para todos los micro frontends y la shell app.
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/enhanceddisenado 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 configuraciónes existentes de webpack con cambios minimos
- Soporte integrado para TypeScript, CSS Modules, PostCSS, gestión 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 configuración de Rspack: ocasionalmente es necesario bajar a la configuración 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 configuración pueden cambiar entre Rsbuild 1.x y 2.0. Revisar la guia de migración cuando este disponible antes de actualizar.
- Ruta de migración: El equipo de Rsbuild se ha comprometido a proporcionar codemods y una guia de migración 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.3para 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), configuración 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.
Documentación Relacionada
- Module Federation — Composición MFE usando Rsbuild como herramienta de build
- Sistema de Diseño — Configuración de build del sistema de diseño
- Visión General de Arquitectura — Contexto de arquitectura del sistema