- Un bundler JavaScript écrit en Rust, destiné à être utilisé à l’avenir comme bundler dans Vite
- Il fournit une API et une interface de plugins compatibles avec Rollup, mais son périmètre sera probablement plus proche de celui d’esbuild
Pourquoi développer Rolldown
- Vite utilise actuellement en interne deux bundlers
- esbuild : utilisé pour le pré-bundling des dépendances, la transformation TypeScript / JSX, l’abaissement de cible et la minification
- Rollup : utilisé pour les builds de production et prend en charge une interface de plugins compatible Rollup
- Ces deux bundlers sont excellents, mais chacun manque de certaines fonctionnalités apportées par l’autre
- esbuild est très rapide et riche en fonctionnalités, mais il n’est pas adapté au bundling d’applications en raison de limitations de sortie, en particulier pour le découpage en chunks
- Rollup est mature et éprouvé en production pour le bundling d’applications, mais il est bien plus lent que des bundlers compilés dans un langage natif
- Devoir utiliser deux bundlers différents n’est pas optimal à plusieurs égards
- De subtiles différences entre les sorties peuvent entraîner des écarts de comportement entre les builds de développement et de production
- Le code source de l’utilisateur est analysé, transformé et sérialisé de manière répétée par plusieurs outils tout au long du build de production, ce qui engendre beaucoup d’overhead évitable
- Idéalement, Vite devrait pouvoir s’appuyer sur un bundler unique offrant des performances de niveau natif, des transformations intégrées évitant l’overhead de parsing/sérialisation, une interface de plugins compatible avec Rollup et des fonctionnalités avancées de contrôle de sortie adaptées aux applications de grande taille
- C’est précisément pour cela que nous construisons Rolldown
- Rolldown est écrit en Rust et construit actuellement au-dessus de Oxc, dont il exploite déjà le parseur et le resolver. Il est également prévu d’utiliser à l’avenir le transformeur et le minifier d’Oxc lorsqu’ils seront disponibles
- L’objectif à long terme est que les utilisateurs de Vite puissent passer à une version de Vite utilisant Rolldown en interne (directement ou indirectement via leur framework) avec un minimum de friction
- En même temps, Rolldown pourra aussi être utilisé immédiatement comme bundler autonome
Compatibilité avec Rollup et différences
- Rolldown vise à s’aligner autant que possible sur l’API et l’interface de plugins de Rollup afin de faciliter son adoption
- Pour les cas d’usage simples, il pourra servir de remplaçant à Rollup. Cependant, il peut y avoir de légères différences, notamment dans certains cas limites impliquant des options avancées
- Le projet a commencé avec l’intention de porter le code de JS vers Rust, mais l’équipe a rapidement compris que, pour obtenir les meilleures performances, il fallait avant tout écrire le code en tenant compte de la manière dont Rust fonctionne
- L’architecture interne de Rolldown est plus proche de celle d’esbuild que de Rollup, et sa logique de découpage en chunks peut également différer de celle de Rollup
- Le périmètre de Rolldown est lui aussi plus large que celui de Rollup et plus similaire à esbuild. La prise en charge de CommonJS et la résolution de
node_modules sont fournies par défaut, et la transformation TypeScript / JSX ainsi que la minification sont également prévues à l’avenir
1 commentaires