@purecore/one-server-4-all
v0.3.2
Published
Zero dependency modern hot-reload server replacement
Maintainers
Readme
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
- ⚡ Deploy Interativo: Comando
deploycom 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: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 .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=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
⚡ 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 deployO que o wizard faz
- Pergunta o domínio/subdomínio (ex:
app.meusite.com) - Pergunta a porta (padrão: 7000)
- Configura o Nginx com proxy reverso e suporte a WebSocket
- Executa o Certbot para gerar certificados SSL gratuitos (Let's Encrypt)
- 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
- 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:
one-server-4-all - Modifique qualquer arquivo
.css - Observe que apenas o CSS é atualizado, sem reload da página
Teste SPA Support
- Inicie com SPA:
one-server-4-all --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:
one-server-4-all --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 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 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
