Vite Setup Config - Part 1


Bem, esse é um tutorial visando lembrar como configurar o Vite CLI e fazer funcionar com tudo o que uso atualmente no meu dia a dia (18/03/2023) passei um certo sufoco para fazer tudo bem feito, e não estou muito afim de repetir a dose de sufoco no futuro, então, vamos ao setup:

Primeiro a minha config no vite cli é bem simples

yarn create vite

Nisso é escolher o template para React, Typescript+SWC (Speedy Web Compiler - this in Rust!!) e depois disso é acessar o diretório ou a pasta do seu projeto e rodar um yarn install.

A primeira configuração nossa, é somente do path relativo das nossas pastas, porta, process e preview.

Para port e preview, é somente necessário adicionar as keys no nosso vite.config.ts e mudar a default para as nossas configs:

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";

export default defineConfig({
  plugins: [react()],
  server: {
    port: 3000,
  },
  preview: {
    port: 3000,
  },
});

Depois disso vamos para algumas configurações de process.env, o vite tem a sua forma de fazer leitura de variáveis de ambiente, nós iremos adicionar a nossa.

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";

export default defineConfig({
  plugins: [react()],
  server: {
    port: 3000,
  },
  preview: {
    port: 3000,
  },
  define: {
    "process.env": {},
    global: "window",
  },
});

Para isso precisamos adicionar uma nova biblioteca que é o @type/node e eu vou me ater a versão que estou usando “@types/node”: “^18.14.2” e adicionar o -D para ficar nas nossas devDependecies.

  yarn add @type/node@18.14.2 -D

Depois disso é somente importar o path no topo do arquivo e trocar o objeto aberto por process.env:

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";

export default defineConfig({
  plugins: [react()],
  server: {
    port: 3000,
  },
  preview: {
    port: 3000,
  },
  define: {
    "process.env": process.env,
    global: "window",
  },
});

Após isso a minha config com o process.env já deve funcionar normalmente. Meu próximo ponto é adicionar o alias para poder importar facilmente os meus components, assets e etc

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
import path from "path"; //import path

export default defineConfig({
  plugins: [react()],
  server: {
    port: 3000,
  },
  preview: {
    port: 3000,
  },
  resolve: {
    alias: {
      components: `${__dirname}/src/components/`,
      styles: `${__dirname}/src/styles/`,
      types: `${__dirname}/src/types/`,
      utils: `${__dirname}/src/utils/`,
    },
  },
  define: {
    "process.env": process.env,
    global: "window",
  },
});

Uma outra configuração precisa ser feita no nosso tsconfig.json apenas essas duas linhas, uma para setar a base do diretório e outra para mostrar o encaminhamento dos arquivos:

{
  "compilerOptions": {
   // outras configs…
    "baseUrl": ".",
    "paths": {
     "*": ["./src/*"]
    }
  },
  "include": ["src"],
  "references": [{ "path": "./tsconfig.node.json" }]
}

Por fim, removi todos os assets, os arquivos css e criei um folder chamado components.

folder

Removi os imports de css da main.tsx e do App.tsx:

import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";

ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);
import { Counter } from "components/Counter";

function App() {
  return <Counter />;
}

export default App;

E como podem ver ele fez o import do meu counter, esse é o counter component.

└── components
    └── Counter
        └── index.tsx
import { useState } from "react";

export const Counter = () => {
  const [count, setCount] = useState(0);

  return (
    <div>
      <h1>
        Count: <span>{count}</span>
      </h1>
      <button onClick={() => setCount((count) => count + 1)}>Increment</button>
    </div>
  );
};

Bem, por hora é isso! Até mais! o/

Github: Vite Setup