- 将来的にViteのバンドラーとして使用するためにRustで書かれたJavaScriptバンドラー
- Rollup互換のAPIとプラグインインターフェースを提供するが、スコープはesbuildにより近いものになる見込み
Rolldownを開発する理由
- 現在のViteは内部的に2つのバンドラーを使用している
- esbuild : 依存関係の事前バンドル、TypeScript / JSX変換、ターゲットのダウンレベル化およびminificationのために使用
- Rollup : 本番ビルドに使用され、Rollup互換のプラグインインターフェースをサポート
- どちらのバンドラーも優れているが、それぞれにもう一方のバンドラーが提供する機能が不足している
- esbuildは非常に高速で機能も豊富だが、出力、特にチャンク分割の制約という点で、アプリケーションのバンドルには適していない
- Rollupはアプリケーションのバンドル用として成熟しており実戦でも十分に検証されているが、ネイティブ言語でコンパイルされたバンドラーよりはるかに遅い
- 2つの異なるバンドラーを使わなければならないのは、さまざまな面で最適ではない
- 出力間の微妙な違いにより、開発ビルドと本番ビルドの間で挙動の差が生じる可能性がある
- ユーザーのソースは本番ビルド全体を通して複数のツールによって繰り返し構文解析、変換、シリアライズされるため、回避可能な多くのオーバーヘッドが発生する
- 理想的には、Viteがネイティブ級の性能、構文解析/シリアライズのオーバーヘッドを避ける組み込みトランスフォーム、Rollup互換のプラグインインターフェース、大規模アプリケーションに適した高度なビルド出力制御機能を提供する単一のバンドラーを活用できることが望ましい
- これこそが私たちがRolldownを構築する理由
- RolldownはRustで書かれており、現在はパーサーとリゾルバーを提供するOxcの上に構築されている。また、今後Oxcのトランスフォーマーとミニファイアが公開されれば、それらも活用する予定
- 長期的な目標は、Viteユーザーが(フレームワークを通じて直接的または間接的に)摩擦を最小限に抑えながら、内部的にRolldownを使用するViteのバージョンへ移行できるようにすること
- 同時に、Rolldownはスタンドアロンのバンドラーとしてもすぐに使えるようになる
Rollup互換性と相違点
- Rolldownは、採用しやすくするためにRollupのAPIおよびプラグインインターフェースにできる限り一致させることを目標としている
- シンプルなユースケースではRollupの代替となるだろう。ただし、特に高度なオプションが関わるエッジケースでは、若干の違いが生じる可能性がある
- JSからRustへ移植する意図で始まったが、最高の性能を達成するにはRustの動作方式に合わせてコードを書くことを優先すべきだとすぐに気づいた
- Rolldownの内部アーキテクチャはRollupよりもesbuildに近く、チャンク分割ロジックもRollupのものとは異なる可能性がある
- RolldownのスコープもRollupより広く、esbuildにより近い。CommonJSサポート、
node_modules解決がデフォルトで提供され、今後はTypeScript / JSX変換および圧縮にも対応する予定
1件のコメント