10 points par xguru 2024-03-11 | 1 commentaires | Partager sur WhatsApp
  • 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

 
[Ce commentaire a été masqué.]