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.
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 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.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), 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.