## glossário
O que é Node.js?
Node.js é um ambiente de execução que permite rodar JavaScript fora do navegador. Criado em 2009 por Ryan Dahl, ele combina o motor V8 do Chrome com uma biblioteca de entrada e saída assíncrona, dando ao JavaScript acesso a arquivos, rede e processos do sistema.
O impacto foi estrutural: pela primeira vez, a mesma linguagem servia para frontend e backend. Isso reduziu a troca de contexto nas equipes e permitiu compartilhar código de validação e tipos entre as duas pontas.
O modelo assíncrono e não bloqueante
Servidores tradicionais costumam criar uma thread por conexão, o que consome memória e limita a escala. Node usa uma única thread principal com um event loop: quando uma operação demorada é iniciada, ela é delegada ao sistema e a thread segue atendendo outras requisições.
import { readFile, readFileSync } from 'fs';
// bloqueante: trava a thread até terminar
const dados = readFileSync('relatorio.csv', 'utf8');
console.log('depois da leitura');
// não bloqueante: segue o fluxo e volta quando terminar
readFile('relatorio.csv', 'utf8', (erro, dados) => {
console.log('leitura concluída');
});
console.log('isto imprime primeiro');Esse modelo torna Node excelente para cargas com muita entrada e saída — APIs, proxies, streaming, tempo real. E o torna inadequado para processamento pesado de CPU: um cálculo longo trava a única thread e derruba a responsividade de todas as requisições.
npm: o ecossistema como diferencial
O npm é o registro de pacotes que acompanha o Node e o maior repositório de bibliotecas do mundo. Alternativas como Yarn e pnpm resolvem as mesmas dependências com estratégias diferentes de cache e disco — comparação detalhada em gerenciadores de pacotes. Para executar pacotes sem instalá-los globalmente, existe o npx, explicado em introdução ao npx.
Cuidados em produção
- Não bloqueie o event loop — trabalho pesado deve ir para worker threads ou um serviço separado.
- Trate rejeições não capturadas — uma Promise rejeitada sem catch pode derrubar o processo.
- Audite dependências — a facilidade de instalar pacotes é também a maior superfície de ataque do ecossistema.
- Use múltiplos processos — o módulo cluster ou um gerenciador como PM2 aproveita todos os núcleos da máquina.
- Fixe a versão do Node — comportamentos mudam entre versões maiores; declare a versão no projeto.
## faq
Perguntas frequentes
Node.js é uma linguagem de programação?
Não. Node.js é um ambiente de execução (runtime). A linguagem é o JavaScript. Node fornece o motor que executa o código e as APIs para acessar sistema de arquivos, rede e processos.
Node.js aguenta aplicações de grande escala?
Sim. Netflix, PayPal, LinkedIn e Uber operam serviços críticos em Node. A escala vem da arquitetura — múltiplas instâncias, balanceamento e filas — e não de uma única instância aguentando tudo sozinha.
Qual a diferença entre Node.js e Deno ou Bun?
Deno e Bun são runtimes mais recentes que executam JavaScript e TypeScript com propostas distintas: Deno prioriza segurança por permissões explícitas, e Bun prioriza velocidade de execução e de instalação de pacotes. Node continua sendo o mais maduro e o de maior compatibilidade com o ecossistema existente.