Como Detectar o Ambiente de Execução em JavaScript: Node.js, Browser ou Web Worker

Como Detectar o Ambiente de Execução em JavaScript: Node.js, Browser ou Web Worker

Executar o mesmo código em diferentes ecossistemas pode causar falhas graves ao acessar variáveis globais inexistentes (como window no servidor ou process no navegador). O uso de um snippet de detecção de ambiente resolve essa incompatibilidade ao checar com segurança os objetos globais disponíveis e identificar onde a aplicação está rodando.

JavaScript

/**
 * Identifica o ambiente de execução atual do JavaScript.
 * @returns {'node' | 'browser' | 'webworker' | 'unknown'} O nome do ambiente detectado.
 */
function detectarAmbiente() {
  // Verifica se possui o processo global típico do Node.js
  const isNode = typeof process !== 'undefined' && 
                 process.versions != null && 
                 process.versions.node != null;

  // Verifica se está rodando dentro de um Web Worker
  const isWorker = typeof WorkerGlobalScope !== 'undefined' && 
                   self instanceof WorkerGlobalScope;

  // Verifica se está no navegador padrão com acesso ao DOM (window e document)
  const isBrowser = typeof window !== 'undefined' && 
                    typeof window.document !== 'undefined';

  if (isNode) return 'node';
  if (isWorker) return 'webworker';
  if (isBrowser) return 'browser';
  return 'unknown';
}

// --- Exemplo Prático de Uso ---
const ambienteAtual = detectarAmbiente();

console.log(`[Runtime] Código executando em ambiente: ${ambienteAtual}`);

if (ambienteAtual === 'node') {
  console.log(`Versão do Node.js: ${process.version}`);
} else if (ambienteAtual === 'browser') {
  console.log(`URL da página: ${window.location.href}`);
} else if (ambienteAtual === 'webworker') {
  console.log('Executando em uma thread de background.');
}

Pontos-chave

  • Operador typeof Seguro: A verificação com typeof previne exceções do tipo ReferenceError ao checar variáveis globais que podem não ter sido declaradas no escopo atual.
  • Ordem das Checagens: Testar WorkerGlobalScope antes de window previne falsos positivos, já que Web Workers possuem o objeto self, mas não possuem o objeto window.document.
  • Uso em Bibliotecas Isomórficas: Essencial para criar pacotes executáveis tanto no backend quanto no frontend (código universal), permitindo carregar dependências específicas de cada ambiente condicionalmente.
  • Atenção com Bundlers: Ferramentas como Webpack ou Vite podem injetar polyfills do process no navegador; por isso, verificar process.versions.node garante maior precisão na detecção do Node.js real.

Thales de Oliveira Gomes

Thales de Oliveira Gomes é gestor de Tecnologia da Informação, especialista em infraestrutura de redes, computação em nuvem e operações de TI hospitalar, com mais de 18 anos de experiência na área. Graduado em Gestão de TI e pós-graduado em Engenharia de Redes e Telecomunicações, Cloud Computing, Redes de Computadores e Gestão Hospitalar, construiu uma trajetória sólida liderando projetos de alta complexidade, como a implementação e migração para nuvem de sistemas ERP de grande porte. Sua atuação no setor o levou a ser indicado ao prêmio IT Leaders Brasil na categoria Rising Leaders. Além da carreira corporativa e da paixão por tecnologia, Thales é autor independente com mais de 70 obras publicadas sobre redes, segurança da informação, Linux e física, além de criador de conteúdo no blog Vetor Tech e na plataforma CiberDicas. No universo das artes e do entretenimento, atua como produtor de música eletrônica sob o projeto Yknex, cria ilustrações digitais e compartilha walkthroughs de games no YouTube.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *