Diagnosticando erros de execução da VM
Seu código ofuscado por VM lança um erro em tempo de execução — pode ser um RangeError: Invalid array length, mas o mesmo checklist
vale para outros erros inesperados que só aparecem depois da ofuscação. Siga os passos abaixo em ordem. O primeiro
pega a causa de longe mais comum; os demais ajudam a isolar um bug de verdade.
Passo 1 — Verifique o ambiente de execução em relação à opção target
A causa isolada mais comum de Invalid array length e erros semelhantes é uma incompatibilidade entre a opção target e
o ambiente em que o código realmente roda, combinada com vmSelfDefending: true.
Ambientes em que isso dispara:
- Node.js (executando o bundle ofuscado diretamente com
node) - Chrome / Chromium headless, PhantomJS
- Puppeteer, Playwright, Cypress, Selenium / ChromeDriver, Nightmare
- jsdom e outras emulações de DOM no servidor
- Qualquer ambiente em que os builtins nativos do navegador tenham recebido hooks ou tenham sido substituídos
Se o seu ambiente de execução está nessa lista, o erro é a proteção funcionando como planejado, não um bug. Escolha a solução que corresponde ao seu caso:
- Rodando em Node.js de propósito (script no servidor, ferramenta de CLI, processo principal do Electron): defina
target: 'node'ao ofuscar. A camada de self-defending vai se calibrar para o Node em vez do navegador. - Rodando testes automatizados / E2E em um build ofuscado (Cypress, Playwright, Puppeteer, Selenium): gere um build de teste separado com
vmSelfDefending: false. A opção foi feita para quebrar automação; ela não pode ser liberada para ferramentas individuais. Veja VM Self Defending para a lista completa de ambientes incompatíveis. - Rodando em um navegador de verdade e ainda vendo o erro: confirme que nenhuma extensão, script de devtools ou página que envolve o app está instalando hooks nos builtins nativos (
Array,Function.prototype,JSONetc.). Reproduza em um perfil limpo antes de tratar isso como um bug.
Passo 2 — Reduza até uma única função
Se o Passo 1 não resolveu, o erro está em um trecho específico do código transformado. Mude para
vmTargetFunctionsMode: 'comment' e adicione /* javascript-obfuscator:vm */
a uma função de cada vez até o erro reaparecer. A função que você marcou quando o erro voltou é a culpada —
esse é o repro mínimo que você vai enviar ao suporte.
Passo 3 — Envie um relatório de bug
Depois de confirmar que não é uma incompatibilidade de target/self-defending e de ter uma função isolada, envie um e-mail para
support@obfuscator.io. Quanto mais dos itens abaixo você incluir, mais rápido conseguimos corrigir:
- Stack trace completo do erro, exatamente como aparece no console — não uma paráfrase.
- Opções do ofuscador em JSON. Copie o objeto de opções inteiro que você usou (ou o nome da predefinição mais as sobrescritas). Interações sutis entre opções são comuns, então precisamos do conjunto exato.
- Versão do obfuscator — mostrada no canto inferior direito do editor.
- Ambiente — navegador + versão, versão do Node.js, SO e qualquer coisa fora do comum no runtime (extensões, polyfills, builtins personalizados).
- Reprodução mínima — de preferência a única função do Passo 2, mais o ponto de chamada necessário para disparar o erro.
- O código-fonte original (antes da ofuscação), quando possível. A saída ofuscada é opaca do nosso lado também; sem a entrada, ficamos fazendo engenharia reversa do nosso próprio bytecode.
