10 Punkte von xguru 2024-03-11 | 1 Kommentare | Auf WhatsApp teilen
  • Ein in Rust geschriebener JavaScript-Bundler, der künftig als Bundler in Vite eingesetzt werden soll
  • Bietet eine Rollup-kompatible API und Plugin-Schnittstelle, der Umfang wird aber eher esbuild ähneln

Warum wir Rolldown entwickeln

  • Vite verwendet derzeit intern zwei Bundler
    • esbuild: für Dependency-Pre-Bundling, TypeScript-/JSX-Transformation, Target-Downgrading und Minification
    • Rollup: wird für Produktions-Builds verwendet und unterstützt eine Rollup-kompatible Plugin-Schnittstelle
  • Beide Bundler sind hervorragend, aber jedem fehlen Funktionen, die der jeweils andere bietet
    • esbuild ist extrem schnell und funktionsreich, eignet sich aber nicht gut zum Bundling von Anwendungen, insbesondere wegen Einschränkungen bei der Ausgabe, vor allem bei der Chunk-Aufteilung
    • Rollup ist ausgereift und praxiserprobt für das Bundling von Anwendungen, aber deutlich langsamer als Bundler, die in nativen Sprachen kompiliert sind
  • Zwei unterschiedliche Bundler verwenden zu müssen, ist in vielerlei Hinsicht nicht optimal
    • Durch feine Unterschiede in der Ausgabe kann es zu Verhaltensunterschieden zwischen Entwicklungs-Builds und Produktions-Builds kommen
    • User-Quellcode wird während des gesamten Produktions-Builds wiederholt von mehreren Tools geparst, transformiert und serialisiert, was viel vermeidbaren Overhead verursacht
  • Idealerweise sollte Vite einen einzigen Bundler nutzen können, der native Performance, integrierte Transforms zur Vermeidung von Parsing-/Serialisierungs-Overhead, eine mit Rollup kompatible Plugin-Schnittstelle und erweiterte Kontrolle über die Build-Ausgabe für große Anwendungen bietet
  • Genau deshalb entwickeln wir Rolldown
    • Rolldown ist in Rust geschrieben und derzeit auf Oxc aufgebaut, wobei dessen Parser und Resolver genutzt werden. Künftig sollen auch der Transformer und Minifier von Oxc genutzt werden, sobald sie verfügbar sind
    • Das langfristige Ziel ist, dass Vite-Nutzer mit minimaler Reibung — direkt oder indirekt über Frameworks — auf eine Vite-Version wechseln können, die intern Rolldown verwendet
    • Gleichzeitig wird Rolldown auch sofort als eigenständiger Bundler nutzbar sein

Rollup-Kompatibilität und Unterschiede

  • Rolldown zielt darauf ab, API und Plugin-Schnittstelle von Rollup so weit wie möglich nachzubilden, damit die Einführung leichtfällt
  • In einfachen Anwendungsfällen kann es als Ersatz für Rollup dienen. In Edge Cases, besonders wenn fortgeschrittene Optionen im Spiel sind, kann es jedoch zu kleineren Unterschieden kommen
  • Ursprünglich begann das Projekt mit der Absicht, den Code von JS nach Rust zu portieren, doch es wurde schnell klar, dass für die bestmögliche Performance Vorrang haben muss, den Code an die Arbeitsweise von Rust anzupassen
  • Die interne Architektur von Rolldown ist näher an esbuild als an Rollup, und auch die Logik zur Chunk-Aufteilung kann sich von der von Rollup unterscheiden
  • Der Umfang von Rolldown ist ebenfalls breiter als der von Rollup und ähnelt eher esbuild. CommonJS-Unterstützung und node_modules-Auflösung sind standardmäßig enthalten; künftig sollen auch TypeScript-/JSX-Transformation und Minification unterstützt werden

1 Kommentare

 
[Dieser Kommentar wurde ausgeblendet.]