Skip to content

suissa/purecore-hot-server

Repository files navigation

Purecore one-server-4-all

Um servidor de desenvolvimento hot-reload moderno e leve, construído com TypeScript e zero dependências externas.

✨ Funcionalidades

  • 🚀 Hot Reload Inteligente: CSS injection sem recarregar página + full reload para outros arquivos
  • 📜 SPA Support: Flag --spa para aplicações React/Vue/Angular
  • 📁 MIME Types Robustos: Suporte completo para vídeos, fontes, manifestos e mais
  • 🌐 CORS Habilitado: Acesso cross-origin para desenvolvimento
  • 🔒 HTTPS Support: Modo HTTPS com certificados auto-assinados
  • Deploy Interativo: Comando deploy com Nginx + Certbot + PM2 configurados automaticamente
  • 📡 Server-Sent Events: Notificações em tempo real eficientes
  • 🔍 Logs Detalhados: Visualização de arquivos servidos e recursos HTML
  • 🔓🔒 Indicadores Visuais: Emojis de cadeado no terminal (aberto/fechado)

🚀 Instalação

npm install -g one-server-4-all
# ou
bun install -g one-server-4-all

🔒 Modo HTTPS

O one-server-4-all suporta HTTPS com certificados auto-assinados para desenvolvimento local.

Ativar HTTPS

# Via linha de comando
one-server-4-all --https=true

# Via npm scripts
npm run dev:https

# Via bun
bun run dev:https

Gerenciamento de Certificados

# Gerar certificados auto-assinados
npm run certs:generate

# Ver informações dos certificados
npm run certs:info

# Limpar certificados existentes
npm run certs:clean

Nota: Os certificados são salvos em .one-server-4-all-certs/ no diretório do projeto.

📖 Uso Básico

# Na pasta do seu projeto
one-server-4-all

# Com opções
one-server-4-all --port=3000 --spa=true

🎯 Funcionalidades Avançadas

CSS Hot Loading

Quando você modifica arquivos .css, apenas o estilo é atualizado sem recarregar a página inteira.

SPA Support

one-server-4-all --spa=true

Rotas inexistentes (como /usuarios/1) automaticamente servem index.html, permitindo que seu framework frontend assuma o roteamento.

MIME Types Suportados

  • Vídeos: MP4, WebM, OGG, AVI, MOV, WMV, FLV
  • Áudios: MP3, WAV, OGG, AAC, M4A, Opus
  • Fontes: WOFF, WOFF2, TTF, OTF, EOT
  • Imagens: PNG, JPG, GIF, SVG, WebP, BMP, TIFF
  • Documentos: PDF, CSV, YAML, TOML, TXT, MD
  • Web: JSON, XML, Manifest, WASM

⚡ Deploy Interativo (Produção)

O comando deploy oferece um wizard interativo para configurar projetos em produção com Nginx + Certbot SSL + PM2 automaticamente.

Como usar

npx vai-server deploy
# ou
one-server-4-all deploy

O que o wizard faz

  1. Pergunta o domínio/subdomínio (ex: app.meusite.com)
  2. Pergunta a porta (padrão: 7000)
  3. Configura o Nginx com proxy reverso e suporte a WebSocket
  4. Executa o Certbot para gerar certificados SSL gratuitos (Let's Encrypt)
  5. Gera o comando PM2 pronto para execução

Exemplo de output

🚀 one-server-4-all DEPLOYER v0.4.0
─────────────────────────────────────────

➜ Qual o domínio/subdomínio? (ex: app.meusite.com)
  ❯ api.meusite.com

➜ Qual a porta do servidor? (padrão 7000)
  ❯ 7001

➜ Deseja configurar Nginx + SSL (Certbot) agora? (s/n)
  ❯ s

📦 Configuração Final:
────────────────────────
Dominio: api.meusite.com
Porta:   7001
SSL:     Configurado via Certbot
PM2:     pm2 start "npx vai-server --port=7001 --open=false" --name "api.meusite.com"
────────────────────────

✨ Deploy concluído com sucesso!

Fluxo de produção

Usuário → HTTPS (Nginx:443 com Certbot) → HTTP (vai-server:porta)

O Nginx faz a terminação SSL e repassa para o servidor em HTTP simples, eliminando a necessidade de configurar certificados no Node.js.

🔧 Opções de CLI

Opção Descrição Padrão
--port=<number> Porta do servidor 9999
--root=<path> Diretório raiz . (diretório atual)
--open=<true/false> Abrir navegador automaticamente true
--spa=<true/false> Habilitar suporte SPA false
--https=<true/false> Habilitar modo HTTPS false

🏗️ Como foi feito

Este projeto foi desenvolvido seguindo uma arquitetura minimalista e moderna:

Técnicas Utilizadas

  1. TypeScript Estrito: Tipagem forte em todo o código
  2. APIs Nativas: Uso exclusivo de módulos node:*
  3. Server-Sent Events: Comunicação bidirecional eficiente
  4. File System Watch: Monitoramento recursivo de mudanças
  5. Mini-Zod: Validação type-safe sem dependências
  6. CSS Injection: DOM manipulation para hot reload inteligente

Arquitetura

src/
├── index.ts      # CLI e configuração
├── server.ts     # Servidor HTTP e lógica principal
├── watcher.ts    # Monitoramento de arquivos
└── validator.ts  # Validação type-safe

Funcionamento

  1. Watcher monitora mudanças recursivamente usando fs.watch
  2. Server serve arquivos estáticos com MIME types corretos
  3. SSE notifica clientes sobre mudanças em tempo real
  4. CSS Injection atualiza estilos sem recarregar página
  5. SPA Fallback redireciona 404 para index.html quando habilitado

🧪 Como testar

Teste CSS Injection

  1. Inicie o servidor: one-server-4-all
  2. Modifique qualquer arquivo .css
  3. Observe que apenas o CSS é atualizado, sem reload da página

Teste SPA Support

  1. Inicie com SPA: one-server-4-all --spa=true
  2. Acesse /qualquer-rota-inexistente
  3. Deve carregar index.html em vez de 404

Teste MIME Types

  1. Adicione arquivos de vídeo/fonte no seu projeto
  2. Eles serão servidos com headers corretos

Teste CORS

  1. Acesse arquivos de outro domínio/origin
  2. Deve funcionar sem erros de CORS

Teste HTTPS

  1. Execute: one-server-4-all --https=true
  2. Observe o emoji 🔒 no log do terminal
  3. Acesse https://localhost:9999
  4. Aceite o aviso de certificado auto-assinado

Teste Logs Detalhados

  1. Abra uma página HTML
  2. Observe no terminal:
    • 📄 Arquivos servidos com tamanho e tipo MIME
    • 🔍 Recursos encontrados no HTML (CSS, JS, imagens)
    • 🌐 Confirmação de injeção do hot-reload

📊 Comparação com Live Server

Feature Live Server Purecore one-server-4-all
Dependencies Múltiplas ❌ Zero
Language JavaScript ✅ TypeScript
CSS Injection ✅ Sim ✅ Sim
SPA Support ✅ Sim ✅ Sim
MIME Types Básicos ✅ Robustos
CORS ❌ Não ✅ Sim
Installation Lento ✅ Instantâneo

🔍 Análise de Dependências Obsoletas

Durante o desenvolvimento, analisamos dependências comuns em servidores de desenvolvimento e identificamos quais são desnecessárias no Node.js moderno:

❌ Dependências Obsoletas

  • object-assign: Substituído por Object.assign() nativo
  • http-auth: Autenticação HTTP pode ser feita nativamente
  • colors: Node.js 20+ tem util.styleText() nativo
  • opn: child_process nativo abre URLs/arquivos
  • event-stream: ⚠️ Vulnerabilidade conhecida, usar streams nativos

⚡ Alternativas Nativas Utilizadas

  • File System: node:fs com fs.watch() recursivo
  • HTTP Server: node:http e node:https nativos
  • Crypto: node:crypto para certificados HTTPS
  • Path/URL: node:path e node:url para manipulação
  • Streams: node:stream para Server-Sent Events

🎯 Resultado

Zero dependências externas = instalação instantânea, sem vulnerabilidades de terceiros, e compatibilidade garantida com futuras versões do Node.js.

📝 Changelog

Veja todas as mudanças em CHANGELOG.md

🤝 Contribuição

Contribuições são bem-vindas! Este projeto segue uma filosofia de zero dependencies e simplicidade arquitetural.

📄 Licença

MIT

About

Zero dependency modern hot-reload server replacement

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published