Blog Fellyph Cintra

Blog sobre WordPress, IA, PWA e JavaScript

Introdução a Webpack

Logotipo do webpack, com um cubo azul ao lado do nome.

Esta introdução a webpack explica como transformar módulos JavaScript em um bundle carregado pelo navegador. O exemplo original foi publicado em 2019, com webpack 4. Abaixo, você encontra o fluxo de instalação, configuração e execução, com observações para usar webpack 5.

O que é webpack?

O webpack é um empacotador de módulos JavaScript. Ele transforma os seus módulos num único arquivo Javascript, ou bundle, que pode ser facilmente carregado pelo navegador. O webpack é uma ferramenta extremamente poderosa e versátil, e pode ser usada para empacotar qualquer tipo de arquivo, desde JavaScript e CSS até imagens e arquivos de fontes. No entanto, o webpack é principalmente usado para empacotar aplicações JavaScript modernas que usam um bundler.

Ele irá funcionar recursivamente, um arquivo funciona como ponto de partida, a partir desse ponto inicial ele irá varrer todos os arquivos conectados na sua aplicação e para cada caso teremos um tratamento específico.

Introdução a webpack
Introdução a webpack

Quais as vantagens de utilizar webpack?

Qual a vantagem disso tudo? Ainda é comum em aplicação web carregando dezenas JavaScript com diferentes scripts tags, se você não fizer isso da maneira correta irá causa uma série de problemas de performance na sua aplicação. O gerenciamento de módulos ataca alguns problemas de performance.

O webpack gerencia as dependências JavaScript do projeto. Para CSS e pré-processadores, como Sass e Less, você configura loaders. No webpack 5, imagens e outros arquivos também podem usar Asset Modules, sem um loader específico para cada formato.

O tutorial original usava webpack 4. Para novos projetos, a documentação atual do webpack apresenta webpack 5. Use os exemplos como introdução aos conceitos e confira a compatibilidade de plugins e loaders antes de atualizar um projeto antigo.

Vale salientar que funcionamento do Webpack é um pouco diferente do Gulp e Grunt, eles são gerenciadores de tarefas enquanto o Webpack é um gerenciador de módulos, o seu foco é como os arquivos serão carregados separados por extensão.

Claro que podemos trabalhar uma série de recursos que o gulp/grunt realizam, por exemplo, toda parte de otimização, minificação, tratamento de arquivos e concatenação.

Como funciona Webpack

O processo de leitura com Webpack é dividido em 4 conceitos:

  • Entry: qual será o nosso arquivo de entrada, o nosso ponto inicial
  • Output: o nosso arquivo final gerado
  • Loaders: para cada categoria de arquivo o Webpack possui um loader devemos gerenciar este ponto no nosso arquivo de configuração.
  • Plugins: Webpack disponibiliza uma série de plugins, para diferentes tipos de situações.

Nas versões anteriores nos iniciávamos um projeto com o arquivo webpack.config.js nele especificamos como o Webpack ira se comportar. Na versão nova do Webpack podemos iniciar um projeto sem o arquivo de configuração, mas você quiser realizar otimizações extra com o webpack.config.js

Preparativos para a introdução a webpack

Para esse tutorial criaremos um projeto simples com dois arquivos, a estrutura será a seguinte, cada passo desse tutorial criarei uma branch para você acompanha a evolução dos arquivos, por exemplo, step-1… step-2… step-3… O nosso ponto de partida será o seguinte:

Temos um arquivo index.html e dentro da pasta SRC temos uma index.js - introdução a webpack
Temos um arquivo index.html e dentro da pasta SRC temos uma index.js – introdução a webpack

Antes de iniciar a introdução a Webpack, você irá precisar de uma versão atualizada do nodeJS/NPM, podemos verificar a versão do nosso NPM com o comando no nosso terminal:

npm -v
Verificando a versão do node - introdução a webpack
Verificando a versão do node – introdução a webpack

Na raiz no nosso projeto inicializaremos o nosso pacote NPM(step-2), nele salvaremos todas as dependências para o nosso projeto, assim no nosso terminal executamos o comando:

npm init
Inicializando o projeto - introdução a webpack
Inicializando o projeto – introdução a webpack

Na imagem acima temos o final do passo-a-passo realizar pelo NPM init, ele ira verificar se já temos um arquivo package.json, caso não, ele irar nos ajudar a criar um, efetuando perguntas sobre os campos necessários e ao final ele gerar um arquivo package.json:

{
  "name": "webpack-tutorial",
  "version": "1.0.0",
  "description": "Tutorial about webpack",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/fellyph/webpack-tutorial.git"
  },
  "keywords": [
    "tutorial",
    "webpack"
  ],
  "author": "fellyph",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/fellyph/webpack-tutorial/issues"
  },
  "homepage": "https://github.com/fellyph/webpack-tutorial#readme"
}

Code language: JSON / JSON with Comments (json)

Instalando webpack no seu projeto

Continuando nossa introdução a webpack, chegou a hora de instalar webpack em nosso projeto. Com o nosso package.json configurado agora instalaremos o webpack e webpack-cli no nosso projeto(step-3), voltando para o terminal executaremos os seguintes comandos:

npm install webpack webpack-cli --save-dev

Se tudo correr bem teremos a confirmação no nosso terminal:

Terminal exibindo a instalação
Terminal exibindo a instalação

Caso a versão do seu node não suporte a última versão do Webpack, você receberá um alerta para atualizar o seu nodeJS e NPM. Agora criaremos a determinada situação para fazer uma comparação após usarmos Webpack. Inicialmente adicionaremos três novos scripts(content.js, header.js e footer.js) ao nosso projeto e carregá-los na nossa index.html(isso você poderá acompanhar na branch step 4).

arquivos carregados no google chrome dev tools
Simulando uma conexão lenta o resultado será o seguinte. Temos 4 requisições durando um total de 4,29 segundos.

O número de requisições é apenas uma parte do desempenho. Também importam o tamanho dos arquivos, o cache e o tempo de execução do JavaScript. As capturas abaixo mostram um experimento de 2019, não um benchmark para projetos atuais.

Uma solução para isso será enviar um único bundle contendo todos os arquivos, agora verificaremos como fazer isso com Webpack primeiro definiremos o nosso webpack.config.js:

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js'
  }
};
Code language: JavaScript (javascript)

A configuração informa o arquivo de entrada, src/index.js, e o destino do bundle, dist/main.js. O arquivo de entrada importa content.js, header.js e footer.js.

var myContent = require('./js/content');
var myHeader = require('./js/header');
var myFooter = require('./js/footer');
Code language: JavaScript (javascript)

Depois de salvar os arquivos, execute o webpack na raiz do projeto. O comando abaixo usa o modo de desenvolvimento:

npx webpack --mode development

No index.html, substitua as tags dos três scripts originais pelo bundle gerado:

<script src="./dist/main.js"></script>Code language: HTML, XML (xml)

Para gerar a versão de produção, use npx webpack --mode production. Esse fluxo segue a introdução oficial do webpack.

O Webpack irá ler o arquivo index.js e varrer todos os arquivos relacionados e criar um arquivo único simulando uma conexão lenta o resultado será o seguinte:

image do google chrome dev tools
Agora temos duas requisições 2 requisições em 4.24 segundos.

Então vamos fechando aqui a nossa introdução a webpack, até o momento não efetuamos nenhuma otimização esse post serviu como uma introdução a webpack, nos próximos posts podemos evoluir o nosso projeto e aumentar a sua complexidade. O código final você encontra aqui: https://github.com/fellyph/webpack-tutorial/tree/step-5

Conteúdo relacionado

LEITURAS_RELACIONADAS

> ler ./comentarios.log


> adicionar comentário

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *