vai-server
v0.1.0
Published
Zero dependency modern hot-reload server replacement
Maintainers
Readme
Purecore Hot Server
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
--spapara 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
- 📡 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 hot-server
# ou
bun install -g hot-server🔒 Modo HTTPS
O Hot Server suporta HTTPS com certificados auto-assinados para desenvolvimento local.
Ativar HTTPS
# Via linha de comando
hot-server --https=true
# Via npm scripts
npm run dev:https
# Via bun
bun run dev:httpsGerenciamento 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:cleanNota: Os certificados são salvos em .hot-server-certs/ no diretório do projeto.
📖 Uso Básico
# Na pasta do seu projeto
hot-server
# Com opções
hot-server --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
hot-server --spa=trueRotas 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
🔧 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
- TypeScript Estrito: Tipagem forte em todo o código
- APIs Nativas: Uso exclusivo de módulos
node:* - Server-Sent Events: Comunicação bidirecional eficiente
- File System Watch: Monitoramento recursivo de mudanças
- Mini-Zod: Validação type-safe sem dependências
- 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-safeFuncionamento
- Watcher monitora mudanças recursivamente usando
fs.watch - Server serve arquivos estáticos com MIME types corretos
- SSE notifica clientes sobre mudanças em tempo real
- CSS Injection atualiza estilos sem recarregar página
- SPA Fallback redireciona 404 para index.html quando habilitado
🧪 Como testar
Teste CSS Injection
- Inicie o servidor:
hot-server - Modifique qualquer arquivo
.css - Observe que apenas o CSS é atualizado, sem reload da página
Teste SPA Support
- Inicie com SPA:
hot-server --spa=true - Acesse
/qualquer-rota-inexistente - Deve carregar
index.htmlem vez de 404
Teste MIME Types
- Adicione arquivos de vídeo/fonte no seu projeto
- Eles serão servidos com headers corretos
Teste CORS
- Acesse arquivos de outro domínio/origin
- Deve funcionar sem erros de CORS
Teste HTTPS
- Execute:
hot-server --https=true - Observe o emoji 🔒 no log do terminal
- Acesse https://localhost:9999
- Aceite o aviso de certificado auto-assinado
Teste Logs Detalhados
- Abra uma página HTML
- 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 Hot Server | |-------------------|-------------|---------------------| | 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 porObject.assign()nativohttp-auth: Autenticação HTTP pode ser feita nativamentecolors: Node.js 20+ temutil.styleText()nativoopn:child_processnativo abre URLs/arquivosevent-stream: ⚠️ Vulnerabilidade conhecida, usar streams nativos
⚡ Alternativas Nativas Utilizadas
- File System:
node:fscomfs.watch()recursivo - HTTP Server:
node:httpenode:httpsnativos - Crypto:
node:cryptopara certificados HTTPS - Path/URL:
node:pathenode:urlpara manipulação - Streams:
node:streampara 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
