explica_ai_webpack



Preview

Hoje falaremos sobre Webpack, um assunto muito importante e daora de ser tratado entre os Dev’s. Aqui, mostrarei o por que você deveria usar essa ferramenta e quais usos esse empacotador de arquivos pode ter no seu dia a dia. Vou deixar um resuminho também para você apenas pegar os arquivos prontos a aplicar no projeto, tamo junto 👍

Topicos

No resumo, irei colocar apenas os arquivos já configurados para agilizar a sua vida caso já tenha lido o artigo ou deseja apenas testar o webpack.

Instalação geral

npm i -D webpack webpack-cli @babel/core @babel/preset-env babel-loader css-loader style-loader mini-css-extract-plugin

Configurações

  //packeage.json

  {
    "name": "testewebpack",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1",
      "build:dev": "webpack -w --mode development",
      "build:prod": "webpack --mode production"
    },
    "author": "",
    "license": "ISC",
    "devDependencies": {
      "@babel/core": "^7.18.13",
      "@babel/preset-env": "^7.18.10",
      "babel-loader": "^8.2.5",
      "core-js": "^3.25.0",
      "css-loader": "^6.7.1",
      "mini-css-extract-plugin": "^2.6.1",
      "style-loader": "^3.3.1",
      "webpack": "^5.74.0",
      "webpack-cli": "^4.10.0"
    }
  }
  //webpack.config.js

  const path = require('path');
  const MiniCssExtractPlugin = require("mini-css-extract-plugin");

  module.exports = {
    entry: ["./src/index.js"],
    output: {
      filename: 'main.js',
      path: path.resolve(__dirname, 'dist/js')
    },
    module: {
      rules: [
        {
          test: /\.js$/,
          exclude: /node_modules/,
          use: {
            loader: 'babel-loader',
            options: {
              cacheDirectory: true,
              presets: ['@babel/preset-env'],
            }
          }
        },
        {
          test: /\.css$/,
          use: ['style-loader','css-loader']
        },
        {
          test: /\.css$/i,
          use: [MiniCssExtractPlugin.loader, "css-loader"],
        },
      ]
    },

    plugins: [
      new MiniCssExtractPlugin({
        filename: "../css/style.css"
      })
    ]
  };
  //babel.config.js

  module.exports = {
    presets: ['@babel/preset-env']
  }

Arquivos

  //index.js

  import './css/style.css';

Lembrando que essas configurações são referentes aos exemplos que fizemos, isso deverá ser adaptado para os arquivos do seu projeto.

O webpack é um empacotador de módulos para javascript, ou seja, ele junta arquivos JS ou outros formatos, assim como bibliotecas, frameworks, pré-processaores em um único arquivo só. Tudo isso com diferentes formas trabalhar (Produção e Desenvolvimento) e sem duplicar arquivos, tudo na ordem certa como o menor tamanho possível para o deploy.

No geral, essa ferramenta consegue fazer algumas coisas bem legais com arquivos que trabalhamos diariamente, porém, levando as “boas práticas” a outro nível. Aqui temos algumas coissas que é possível fazer:

Essa ferramenta funciona a partir de “Módulos”, para quem já está acostumado com ES6+ deve saber como funciona os import/exports porém para quem não sabe, vou fazer um overview abaixo.