- Un bundler de JavaScript escrito en Rust para usarse en el futuro como bundler en Vite
- Ofrece una API y una interfaz de plugins compatibles con Rollup, pero su alcance será más parecido al de esbuild
Por qué estamos desarrollando Rolldown
- Actualmente Vite usa internamente dos bundlers
- esbuild: se usa para el pre-bundling de dependencias, transformación de TypeScript / JSX, reducción de target y minification
- Rollup: se usa para builds de producción y soporta una interfaz de plugins compatible con Rollup
- Ambos bundlers son excelentes, pero a cada uno le faltan funciones que el otro ofrece
- esbuild es muy rápido y rico en funciones, pero no es adecuado para bundlear aplicaciones por sus limitaciones en la salida, especialmente en la división de chunks
- Rollup es maduro y está probado en producción para bundlear aplicaciones, pero es mucho más lento que los bundlers compilados a lenguajes nativos
- Tener que usar dos bundlers distintos no es lo ideal en varios aspectos
- Las diferencias sutiles entre salidas pueden causar diferencias de comportamiento entre el build de desarrollo y el build de producción
- El código fuente del usuario se analiza, transforma y serializa repetidamente por varias herramientas a lo largo del build de producción, lo que genera mucho overhead evitable
- Idealmente, Vite debería poder aprovechar un solo bundler que ofrezca rendimiento a nivel nativo, transforms integradas para evitar overhead de parsing/serialización, una interfaz de plugins compatible con Rollup y controles avanzados de salida de build adecuados para aplicaciones grandes
- Esa es precisamente la razón por la que estamos construyendo Rolldown
- Rolldown está escrito en Rust y actualmente se construye sobre Oxc, aprovechando su parser y resolver. También planea aprovechar en el futuro el transformer y el minifier de Oxc cuando estén disponibles
- El objetivo a largo plazo es que los usuarios de Vite puedan cambiar a una versión de Vite que use internamente Rolldown (directa o indirectamente a través del framework) con la menor fricción posible
- Al mismo tiempo, Rolldown también podrá usarse directamente como bundler independiente
Compatibilidad con Rollup y diferencias
- Rolldown busca alinearse lo más posible con la API y la interfaz de plugins de Rollup para facilitar su adopción
- En casos de uso simples, podrá servir como reemplazo de Rollup. Sin embargo, puede haber algunas diferencias en edge cases, especialmente cuando intervienen opciones avanzadas
- Aunque comenzó con la intención de portar el código de JS a Rust, pronto se dieron cuenta de que para lograr el mejor rendimiento había que priorizar escribir el código de acuerdo con la manera en que funciona Rust
- La arquitectura interna de Rolldown está más cerca de esbuild que de Rollup, y su lógica de división de chunks también puede diferir de la de Rollup
- El alcance de Rolldown también es más amplio que el de Rollup y más similar al de esbuild. Incluye soporte para CommonJS y resolución de
node_modules por defecto, y en el futuro también planea soportar transformación de TypeScript / JSX y minification
1 comentarios