Muitos projetos Rails na versão 6 ou menor utilizam a gem Webpacker, um wrapper para o webpack, para processar e empacotar código JavaScript. Rails 7 descontinuou Webpacker e introduziu um novo jeito padrão de processar código JS. Para projetos já existentes fazendo uma atualização para Rails 7, isso significa ter que substituir sua ferramenta de empacotamento de JS. Nesse artigo, vamos explorar algumas dessas opções.
Shakapacker
Shakapacker é o sucessor espiritual do Webpacker, criado e mantido pela comunidade. É um empacotador para o Webpack 5+, e é baseado no Webpacker v6, até utilizando-o sem alteração em alguns aspectos. Shakapacker pode coexistir com a asset pipeline e é uma progressão natural do Webpacker. Por essa razão, projetos que dependem muito de versões anteriores da gem Webpacker vão ter uma transição mais tranquila, já que não vai precisar de muitas mudanças. Para projetos maiores atualizando para o Rails 7, essa pode ser uma boa opção. Para fazer a troca, basta seguir o guia de instalação
jsbundling
Jsbundling é a nova ferramenta padrão para Rails 7 e virá configurado em todos os novos apps. Em contraste com Shakapacker, que precisa ser utilizado com Webpack, jsbundling também pode ser utilizado com Webpack, esbuild ou rollup.js. Utiliza a asset pipeline para disponibilizar os pacotes JS, além de ter a opção de processar e empacotar CSS simples e arquivos de imagens, sem precisar de uma nova dependência. Para apps sem muita complexidade de código JS, principalmente aqueles com times de desenvolvimento menores, essa pode ser uma opção a ser considerada, já que a troca da gem Webpacker pode ser bem direta. Essa também é uma opção para projetos maiores, desde que não se tenha muitas configurações específicas de Webpacker. Para fazer a migração, basta seguir o guia de passo a passo
Bonus: cssbundling junto de jsbundling
Se você escolher fazer a transição para jsbundling, mas seu projeto utiliza frameworks como Sass ou Tailwind, você também pode considerar utilizar cssbundling em conjunto para processar seu CSS. Tal qual jsbundling, cssbundling utiliza a asset pipeline para disponibilizar os pacotes CSS. Essa talvez seja a configuração mais simples das listadas aqui, basta seguir o readme do projeto.
Conclusão
Assim como tudo no mundo de desenvolvimento de software, não existe sempre uma resposta correta. Ao invés disso, é mais uma questão de quais ferramentas irão suprir suas necessidades agora e no futuro. Talvez você até note que nem precise migrar do Webpacker, quem sabe!
Referências
Documentação de Webpack Documentação de Webpacker Repositório de Webpacker Repositório de Shakapacker Repositório de jsbundling-rails Repositório de cssbundling-rails Documentação de Rails asset pipeline