Blog

28 de fevereiro de 2022

Vite

Antes de começarmos a falar sobre o Vite, é de extrema importância conhecermos os principais conceitos e problemáticas que envolvem essa ferramenta.

Antigamente as aplicações JavaScript não possuíam uma complexidade muito alta, apesar da sopa de letrinha que fazíamos dentro do HTML, as necessidades iam de uma simples validação de formulário a carroceis de imagens cheios de efeitos, mas o intuito principal era trazer mais interatividade para as páginas Web. O HTML5 surgiu, o CSS3 e muita coisa que antes só era possível com JavaScript agora esses dois dão conta. Mas, com toda essa evolução, o JavaScript também evoluiu e tomou conta da Web, agora com problemas complexos, novos paradigmas e necessidades. Assim surge a pergunta? Como faço para dividir os programas JavaScript em módulos separados e reutilizá-los? O Node.js teve uma resposta rápida para isso, para ele existem várias bibliotecas e estruturas JavaScript que permitem o uso do módulo (por exemplo, outros CommonJS e AMD sistemas de módulos baseados em RequireJS, e mais recentemente Webpack e Babel).

Webpack - Funcionamento e problemas

Vamos dar uma pincelada em como o Webpack funciona. A seguir, são listados os passos para obter a aplicação em ambiente de produção:

Agora se você está rodando o Webpack em ambiente de desenvolvimento, o processo é um pouco diferente, imagine que agora você está usando o Framework Vue.js e então você roda o comando npm run serve, caso utilize o vue-cli:

Em ambiente de desenvolvimento surge um problema. Quando seu projeto começa a crescer, a quantidade de dependências provavelmente também irá crescer, o que faz com que o processo descrito anteriormente se torne custoso, pois é necessário fazer o build de todo o seu código antes de servi-lo.

Módulos JavaScript nativos (ESM ou Módulos EcmaScript)!

Uma boa notícia é que, os navegadores modernos começaram a dar suporte nativamente à funcionalidade de módulos. Agora eles podem otimizar o carregamento, tornando-os mais eficientes, eliminando o processamento extra no lado do cliente e viagens de ida e volta desnecessárias. Entretanto, para utilizar os módulos JavaScript nativos, os navegadores devem possuir suporte às declarações estáticas import e export. É com base nessa novidade que o Vite sai na frente entre as ferramentas existentes.

💡 Clique aqui para dá aquela olhada nos navegadores que já implementaram essa funcionalidade.

Segue um exemplo de utilização:

Vite - Entendendo o funcionamento

O Vite (palavra francesa para rápido) é uma ferramenta de build que tem o objetivo de fornecer uma experiência de desenvolvimento mais rápida e enxuta para projetos web modernos. Ela funciona em duas partes, o servidor de desenvolvimento que tem várias funcionalidades que tornam a experiência e debugging mais rápido e fácil, e um comando de build pré-configurado que tem como saída um código bem otimizado para produção.

O comando de build do Vite

Já o servidor de desenvolvimento funciona dividindo o código em duas partes, a parte que contém as dependências externas que estão na pasta node_modules, essas dificilmente serão atualizadas, a não ser que você instale um pacote novo, e a parte que contém o seu código. Essas duas partes são tratadas de forma diferente:

Exemplo prático

Digamos que você está acessando uma rota de login que carrega o arquivo apresentado na Figura 1. Ao receber a requisição para o carregamento da página na rota de login, o Vite verifica quais os arquivos estão associados a essa página, nesse exemplo será o componente login.vue. Dando continuidade, será obtida todas as dependências associadas a esse arquivo, que nesse caso vai ser a importação da biblioteca lodash, login.js e login.css, nesse ponto esse processo de busca de dependências será repetido recursivamente até que não existam mais dependências a serem carregadas, formando assim a árvore de dependências para a página em específico.

Após a criação da árvore, para cada arquivo de dependência será realizada uma requisição para o servidor. O servidor do Vite retorna os arquivos transpilados legível para o browserou um código 304 caso esse arquivo não tenha sido modificado e esteja no cache do browser, indicando que ele foi carregado anteriormente. Isso faz com que a quantidade de dados enviados pelo servidor de desenvolvimento seja reduzida drasticamente já que o servidor só precisa enviar arquivos modificados para o browser o que é facilitado pelo fato da não produção bundles. Então, se por exemplo, você modifica o arquivo login.js, por ele não estar em um bundle com outros arquivos , não existe a necessidade de transpilar tudo novamente, apenas será enviado o login.js, isso é chamado de HMR (hot module replacement) que é quando o servidor precisa modificar apenas os módulos que foram alterados pelo usuário.

Um outro comportamento do Vite, que também acelera muito o processo de reload, é o recarregamento, apenas, das dependências utilizadas pela página corrente Então, se houver, por exemplo, um componente login.vue que possui dependência com lodash e outra página empresas.vue que possui a dependência com axios, ao atualizar a página de login apenas os arquivos associados a essa pagina atualizaram.

Colocando a mão na massa

Para iniciar um projeto é muito simples. Você vai precisar do Node.js e o NPM instalados na sua máquina, e executar o comando npm init vite ou npm create vite@last para obter a versão mais recente.

Digite o nome do projeto:

Selecione o Framework que você deseja trabalhar, no caso desse artigo vamos utilizar o Vue:

Além da forma padrão de se trabalhar com Vue utilizando Javascript, o Vite fornece a possibilidade de criar o projeto com o suporte ao Typescript já configurado. Nesse artigo não vamos utilizar TypeScript, então selecione a opção Javascript

Após isso você pode executar os seguintes comandos para rodar o servidor de desenvolvimento do vite:

Como exemplo de uso vamos utilizar o tailwindcss dentro do projeto projeto (guia de instalação). Primeiramente execute os comandos abaixo na pasta do projeto para instalar e inicializar o tailwind.

Modifique o conteúdo do arquivo tailwind.config.js para o conteúdo abaixo, isso é feito para o tailwind conseguir mapear os arquivos:

Agora dentro do projeto vamos criar uma pasta index.css com o seguinte conteúdo:

Após isso é só importar o arquivo index.css dentro do arquivo src/main.js.

Agora você já pode ter o tailwind disponível para utilização sem precisar fazer nenhuma configuração extra. Vamos fazer um teste rápido alterando o arquivo App.vue para o seguinte conteúdo:

Agora é só executar o comando npm run dev e você deve ver o seguinte resultado:

Isso pode ser feito com diferentes pacotes javascript, por exemplo, você pode instalar o pacote sass e ter suporte a sass sem precisar configurar nada, ou instalar o react e react-dom e ter suporte para o react. Arquivos .sass ou .jsx vão ser transpilados automaticamente pelo Vite se eles estiverem sendo importados no seu projeto.

Pontos fortes

Comparativo

Pontos fracos

Conclusão

O Vite é uma ótima ferramenta para desenvolvedores que querem uma velocidade maior na hora de inicializar o servidor de desenvolvimento e de recarregar o código após alguma modificação, ele possui um sistema de build que torna fácil a adição de pacotes bem conhecidos pela comunidade frontend, apesar de ser um pacote relativamente novo, ele se mostra promissor no seu escopo de ser simples, fácil de usar e rápido, e é uma boa alternativa para os usuários do Webpack e outras ferramentas de bundler que não utilizam o sistema de plugins e não mexem com configurações em menor nível do pacote.


Referências

https://harlanzw.com/blog/how-the-heck-does-vite-work/#understanding-webpack
https://dev.to/lixeletto/vite-js-o-build-tool-que-vai-facilitar-a-sua-vida-15ho
https://vitejs.dev/guide/why.html
Podcast com o criador do Vite — https://www.youtube.com/watch?v=UJypSr8IhKY&ab_channel=GitHub


Texto: João Batista Gomes Silva (DEV)