## 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.

Bloqueante versus não bloqueante
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.