10 điểm bởi xguru 2024-03-11 | 1 bình luận | Chia sẻ qua WhatsApp
  • Trình đóng gói JavaScript được viết bằng Rust, dự kiến sẽ được dùng làm bundler cho Vite trong tương lai
  • Cung cấp API và giao diện plugin tương thích với Rollup, nhưng phạm vi sẽ gần với esbuild hơn

Lý do phát triển Rolldown

  • Hiện tại Vite sử dụng nội bộ hai bundler
    • esbuild: dùng cho pre-bundling dependency, chuyển đổi TypeScript / JSX, hạ target và minification
    • Rollup: dùng cho production build và hỗ trợ giao diện plugin tương thích Rollup
  • Cả hai bundler đều rất xuất sắc, nhưng mỗi bên lại thiếu một số khả năng mà bundler kia cung cấp
    • esbuild rất nhanh và giàu tính năng, nhưng không phù hợp để bundle ứng dụng về mặt đầu ra, đặc biệt là các giới hạn trong việc chia chunk
    • Rollup đã trưởng thành và được kiểm chứng thực tế để bundle ứng dụng, nhưng chậm hơn nhiều so với các bundler được biên dịch sang ngôn ngữ native
  • Việc phải dùng hai bundler khác nhau là chưa tối ưu trên nhiều phương diện
    • Những khác biệt tinh vi giữa các đầu ra có thể gây ra khác biệt hành vi giữa development build và production build
    • Mã nguồn của người dùng bị nhiều công cụ lặp đi lặp lại việc phân tích cú pháp, chuyển đổi và tuần tự hóa xuyên suốt production build, gây ra nhiều overhead có thể tránh được
  • Lý tưởng nhất là Vite có thể tận dụng một bundler duy nhất cung cấp hiệu năng ở mức native, transform tích hợp để tránh overhead phân tích cú pháp/tuần tự hóa, giao diện plugin tương thích với Rollup, và khả năng kiểm soát đầu ra build nâng cao phù hợp với các ứng dụng quy mô lớn
  • Đó chính là lý do chúng tôi xây dựng Rolldown
    • Rolldown được viết bằng Rust và hiện được xây dựng trên Oxc, tận dụng parser và resolver hiện tại. Ngoài ra, khi transformer và minifier của Oxc ra mắt trong tương lai, dự án cũng sẽ tận dụng chúng
    • Mục tiêu dài hạn là để người dùng Vite có thể chuyển sang phiên bản Vite dùng Rolldown ở bên trong (trực tiếp hoặc gián tiếp thông qua framework) với mức độ ma sát tối thiểu
    • Đồng thời, Rolldown cũng sẽ có thể được sử dụng ngay như một bundler độc lập

Tính tương thích với Rollup và những khác biệt

  • Rolldown hướng tới việc khớp tối đa với API và giao diện plugin của Rollup để có thể được tiếp nhận dễ dàng
  • Trong các trường hợp sử dụng đơn giản, nó có thể đóng vai trò thay thế Rollup. Tuy nhiên, ở một số edge case, đặc biệt khi liên quan đến các tùy chọn nâng cao, vẫn có thể có khác biệt nhỏ
  • Ban đầu dự án được khởi động với ý định port từ JS sang Rust, nhưng nhanh chóng nhận ra rằng để đạt hiệu năng tốt nhất thì ưu tiên phải là viết mã theo cách phù hợp với cách Rust vận hành
  • Kiến trúc nội bộ của Rolldown gần với esbuild hơn là Rollup, và logic chia chunk cũng có thể khác với Rollup
  • Phạm vi của Rolldown cũng rộng hơn Rollup và tương tự esbuild hơn. Hỗ trợ CommonJS và phân giải node_modules được cung cấp sẵn theo mặc định, và trong tương lai cũng sẽ hỗ trợ chuyển đổi TypeScript / JSX cũng như minification

1 bình luận

 
[Bình luận này đã bị ẩn.]