- Bundler JavaScript yang ditulis dengan Rust untuk digunakan sebagai bundler di Vite pada masa mendatang
- Menyediakan API dan antarmuka plugin yang kompatibel dengan Rollup, tetapi cakupannya akan lebih mirip esbuild
Alasan mengembangkan Rolldown
- Saat ini Vite secara internal menggunakan dua bundler
- esbuild: digunakan untuk pre-bundling dependensi, transformasi TypeScript / JSX, penurunan target, dan minification
- Rollup: digunakan untuk build produksi dan mendukung antarmuka plugin yang kompatibel dengan Rollup
- Keduanya adalah bundler yang sangat baik, tetapi masing-masing kekurangan fungsi yang disediakan oleh bundler lainnya
- esbuild sangat cepat dan kaya fitur, tetapi kurang cocok untuk membundel aplikasi dari sisi output, khususnya dalam hal keterbatasan pemisahan chunk
- Rollup matang dan telah teruji di lingkungan produksi untuk membundel aplikasi, tetapi jauh lebih lambat dibanding bundler yang dikompilasi dengan bahasa native
- Harus menggunakan dua bundler yang berbeda bukanlah kondisi yang optimal dalam banyak hal
- Perbedaan halus pada output dapat menyebabkan perbedaan perilaku antara build pengembangan dan build produksi
- Source code pengguna berulang kali di-parse, ditransformasi, dan diserialisasi oleh beberapa alat sepanjang build produksi, sehingga menimbulkan banyak overhead yang sebenarnya bisa dihindari
- Idealnya, Vite dapat memanfaatkan satu bundler tunggal yang menyediakan performa setingkat native, transform bawaan yang menghindari overhead parsing/serialisasi, antarmuka plugin yang kompatibel dengan Rollup, serta kontrol output build tingkat lanjut yang cocok untuk aplikasi berskala besar
- Inilah alasan kami membangun Rolldown
- Rolldown ditulis dengan Rust dan saat ini dibangun di atas Oxc yang memanfaatkan parser dan resolver yang ada. Selain itu, ketika transformer dan minifier Oxc tersedia nanti, ada rencana untuk memanfaatkannya juga
- Tujuan jangka panjangnya adalah agar pengguna Vite dapat beralih ke versi Vite yang secara internal menggunakan Rolldown dengan hambatan seminimal mungkin, baik secara langsung maupun tidak langsung melalui framework
- Pada saat yang sama, Rolldown juga akan bisa langsung digunakan sebagai bundler mandiri
Kompatibilitas dan perbedaan dengan Rollup
- Rolldown bertujuan untuk semaksimal mungkin selaras dengan API dan antarmuka plugin Rollup agar mudah diadopsi
- Untuk use case sederhana, ini bisa berperan sebagai pengganti Rollup. Namun, pada edge case tertentu, terutama yang melibatkan opsi tingkat lanjut, mungkin ada sedikit perbedaan
- Proyek ini awalnya dimulai dengan niat mem-porting dari JS ke Rust, tetapi kemudian disadari bahwa untuk mencapai performa terbaik, prioritasnya harus menulis kode sesuai cara kerja Rust
- Arsitektur internal Rolldown lebih dekat ke esbuild daripada Rollup, dan logika pemisahan chunk-nya juga bisa berbeda dari milik Rollup
- Cakupan Rolldown juga lebih luas daripada Rollup dan lebih mirip esbuild. Dukungan CommonJS dan resolusi
node_modules disediakan secara default, dan ke depannya juga akan mendukung transformasi TypeScript / JSX serta minification
1 komentar