🚀 Oferta especial: 60% OFF no CrazyStack - Últimas vagas!Garantir vaga →
MÓDULO 1 - AULA 2

Comandos Básicos e Primeiro Projeto

Domine os comandos essenciais e crie seu primeiro projeto com Bun.js

20 minutos
Iniciante
Comandos Básicos do Bun

1. bun init - Criar Projeto

bun init - Modo interativo
bun init -y - Aceita todas as opções padrão
bun init my-project - Cria projeto em pasta específica

2. bun install - Gerenciar Dependências

bun install - Instala todas as dependências
bun add express - Adiciona dependência
bun add -d typescript - Adiciona dev dependency
bun remove express - Remove dependência

3. bun run - Executar Scripts

bun run dev - Executa script "dev"
bun run build - Executa script "build"
bun index.ts - Executa arquivo diretamente
Criando Nosso Primeiro Projeto

Vamos criar um projeto completo passo a passo para entender como o Bun funciona na prática.

Passo 1: Inicializar o Projeto

# Criar diretório
mkdir restaurantix-api
cd restaurantix-api
# Inicializar projeto
bun init -y

Passo 2: Estrutura Criada

restaurantix-api/
├── package.json
├── tsconfig.json
├── index.ts
└── README.md

Passo 3: Analisar package.json

{
  "name": "restaurantix-api",
  "module": "index.ts",
  "type": "module",
  "devDependencies": {
    "@types/bun": "latest"
  },
  "peerDependencies": {
    "typescript": "^5.0.0"
  }
}

✨ Note que o Bun já configura TypeScript automaticamente!

Nosso Primeiro Código

index.ts - Servidor HTTP Básico

// index.ts
console.log("🚀 Iniciando Restaurantix API com Bun.js!");

const server = Bun.serve({
  port: 3000,
  fetch(request) {
    const url = new URL(request.url);
    
    if (url.pathname === "/") {
      return new Response("🍽️ Restaurantix API está funcionando!");
    }
    
    if (url.pathname === "/health") {
      return Response.json({ 
        status: "ok", 
        timestamp: new Date().toISOString(),
        runtime: "Bun.js"
      });
    }
    
    return new Response("Rota não encontrada", { status: 404 });
  },
});

console.log(`🌟 Servidor rodando em http://localhost:${server.port}`);

Executar o Servidor

bun run index.ts
Você verá a mensagem: "🌟 Servidor rodando em http://localhost:3000"

Testar as Rotas

# Em outro terminal
curl http://localhost:3000
curl http://localhost:3000/health
Hot Reload Automático

Uma das grandes vantagens do Bun é o hot reload nativo. Vamos configurar:

Adicionar Script no package.json

{
  "name": "restaurantix-api",
  "scripts": {
    "dev": "bun --watch index.ts",
    "start": "bun index.ts"
  }
}

Executar com Hot Reload

bun run dev

Agora qualquer mudança no código será refletida automaticamente!

⚡ Comparação de Performance

Vamos ver a diferença de performance entre Bun e Node.js:

Node.js

  • • Startup: ~200ms
  • • Requests/sec: ~15,000
  • • Memória: ~50MB
  • • TypeScript: Precisa ts-node

Bun.js

  • • Startup: ~5ms
  • • Requests/sec: ~45,000
  • • Memória: ~25MB
  • • TypeScript: Nativo
🚀 Bun é 3x mais rápido!
🎯 Exercício Prático

Agora é sua vez! Vamos expandir nosso servidor:

Desafio:

  • 1. Adicione uma rota /api/restaurants que retorna uma lista de restaurantes
  • 2. Adicione uma rota /api/orders que retorna uma lista de pedidos
  • 3. Implemente tratamento de erro para rotas não encontradas
  • 4. Adicione logs coloridos usando console.log

Solução:

// Adicione essas rotas no seu index.ts
if (url.pathname === "/api/restaurants") {
  return Response.json([
    { id: 1, name: "Pizza Palace", cuisine: "Italiana" },
    { id: 2, name: "Burger House", cuisine: "Americana" }
  ]);
}

if (url.pathname === "/api/orders") {
  return Response.json([
    { id: 1, restaurant: "Pizza Palace", status: "preparing" },
    { id: 2, restaurant: "Burger House", status: "delivered" }
  ]);
}