- Um bundler JavaScript escrito em Rust para ser usado no futuro como bundler do Vite
- Oferece API e interface de plugins compatíveis com Rollup, mas seu escopo será mais parecido com o do esbuild
Por que estamos desenvolvendo o Rolldown
- Atualmente, o Vite usa internamente dois bundlers
- esbuild: usado para pré-bundling de dependências, transformação de TypeScript / JSX, redução de target e minification
- Rollup: usado para builds de produção e oferece suporte à interface de plugins compatível com Rollup
- Ambos os bundlers são excelentes, mas cada um carece de funcionalidades oferecidas pelo outro
- O esbuild é extremamente rápido e rico em recursos, mas não é adequado para empacotar aplicações no que diz respeito à saída, especialmente em termos de limitações na divisão de chunks
- O Rollup é maduro e já foi amplamente testado em produção para empacotar aplicações, mas é muito mais lento do que bundlers compilados para linguagens nativas
- Ter que usar dois bundlers diferentes não é o ideal em vários aspectos
- Diferenças sutis entre as saídas podem causar divergências de comportamento entre builds de desenvolvimento e builds de produção
- O código-fonte do usuário é repetidamente analisado, transformado e serializado por várias ferramentas ao longo do build de produção, o que gera muito overhead evitável
- Idealmente, gostaríamos que o Vite pudesse usar um único bundler que oferecesse desempenho em nível nativo, transforms integradas para evitar overhead de parsing/serialização, uma interface de plugins compatível com Rollup e recursos avançados de controle da saída de build adequados para aplicações de grande porte
- É exatamente por isso que estamos construindo o Rolldown
- O Rolldown foi escrito em Rust e atualmente é construído sobre o Oxc, aproveitando seu parser e resolver. Também planejamos utilizar o transformer e o minifier do Oxc no futuro, quando forem lançados
- O objetivo de longo prazo é permitir que usuários do Vite mudem para uma versão do Vite que use internamente o Rolldown (direta ou indiretamente por meio de frameworks) com o mínimo de atrito possível
- Ao mesmo tempo, o Rolldown também poderá ser usado imediatamente como um bundler independente
Compatibilidade e diferenças em relação ao Rollup
- O Rolldown tem como objetivo se alinhar o máximo possível com a API e a interface de plugins do Rollup, para facilitar sua adoção
- Em casos de uso simples, ele poderá atuar como substituto do Rollup. No entanto, pode haver pequenas diferenças em edge cases, especialmente quando opções avançadas estiverem envolvidas
- Embora tenha começado com a intenção de portar o código de JS para Rust, logo percebemos que, para alcançar o melhor desempenho, é preciso priorizar escrever o código de uma forma adequada ao funcionamento do Rust
- A arquitetura interna do Rolldown é mais próxima do esbuild do que do Rollup, e a lógica de divisão de chunks também pode diferir da do Rollup
- O escopo do Rolldown também é mais amplo que o do Rollup e mais semelhante ao do esbuild. Suporte a CommonJS e resolução de
node_modules são fornecidos por padrão, e no futuro também haverá suporte a transformação de TypeScript / JSX e minificação
1 comentários