- Gelecekte Vite'ta bundler olarak kullanılmak üzere Rust ile yazılmış bir JavaScript bundler'ı
- Rollup uyumlu API ve eklenti arayüzü sunuyor, ancak kapsamı esbuild'e daha yakın olacak
Rolldown neden geliştiriliyor
- Vite şu anda dahili olarak iki bundler kullanıyor
- esbuild: bağımlılıkların önceden bundle edilmesi, TypeScript / JSX dönüşümü, hedef düşürme ve minification için kullanılıyor
- Rollup: prodüksiyon build'lerinde kullanılıyor ve Rollup uyumlu eklenti arayüzünü destekliyor
- Her iki bundler da harika olsa da, her biri diğer bundler'ın sunduğu bazı yeteneklerden yoksun
- esbuild çok hızlı ve özellik açısından zengin, ancak çıktı tarafında, özellikle chunk bölme kısıtları açısından, uygulamaları bundle etmek için uygun değil
- Rollup, uygulamaları bundle etmek için olgun ve sahada kendini kanıtlamış durumda, ancak native dilde derlenmiş bundler'lara kıyasla çok daha yavaş
- İki farklı bundler kullanmak birçok açıdan ideal değil
- Çıktılar arasındaki ince farklar nedeniyle geliştirme build'i ile prodüksiyon build'i arasında davranış farklılıkları oluşabiliyor
- Kullanıcı kaynak kodu, prodüksiyon build'i boyunca birden fazla araç tarafından tekrar tekrar parse ediliyor, dönüştürülüyor ve serialize ediliyor; bu da kaçınılabilecek ciddi bir ek yük oluşturuyor
- İdeal olan, Vite'ın native seviyede performans, parse/serialize ek yükünü önleyen yerleşik transform'lar, Rollup ile uyumlu eklenti arayüzü ve büyük ölçekli uygulamalar için gelişmiş build çıktısı kontrolü sunan tek bir bundler'dan yararlanabilmesi
- Rolldown'ı geliştirmemizin nedeni tam olarak bu
- Rolldown Rust ile yazıldı ve şu anda parser ve resolver sağlayan Oxc üzerine inşa ediliyor. Ayrıca gelecekte Oxc'nin transformer ve minifier bileşenleri çıktığında bunlardan da yararlanılması planlanıyor
- Uzun vadeli hedef, Vite kullanıcılarının (framework'ler üzerinden doğrudan ya da dolaylı olarak) mümkün olan en az sürtünmeyle, dahili olarak Rolldown kullanan bir Vite sürümüne geçebilmesi
- Aynı zamanda Rolldown bağımsız bir bundler olarak da doğrudan kullanılabilecek
Rollup uyumluluğu ve farklar
- Rolldown, kolay benimsenebilmesi için Rollup'un API'si ve eklenti arayüzüyle mümkün olduğunca uyumlu olmayı hedefliyor
- Basit kullanım senaryolarında Rollup'un yerini alabilecek. Ancak özellikle gelişmiş seçeneklerin devreye girdiği edge case'lerde bazı küçük farklar olabilir
- Başlangıçta amaç, JS'ten Rust'a bir port yapmaktı; ancak kısa sürede en iyi performansı elde etmek için kodu Rust'ın çalışma biçimine uygun şekilde yazmanın öncelik taşıdığı fark edildi
- Rolldown'ın dahili mimarisi Rollup'tan çok esbuild'e daha yakın ve chunk bölme mantığı da Rollup'unkinden farklı olabilir
- Rolldown'ın kapsamı da Rollup'tan daha geniş ve esbuild'e daha benzer. CommonJS desteği ve
node_modules çözümlemesi varsayılan olarak geliyor; gelecekte TypeScript / JSX dönüşümü ve minification da desteklenecek
1 yorum