10 pontos por xguru 2024-03-11 | 1 comentários | Compartilhar no WhatsApp
  • 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

 
[Este comentário foi ocultado.]