Diagnóstico de errores de ejecución de la VM
Tu código ofuscado con la VM lanza un error en tiempo de ejecución: puede ser un RangeError: Invalid array length, pero la misma lista de comprobación
se aplica a otros errores inesperados que solo aparecen tras la ofuscación. Sigue los pasos siguientes en orden. El primero
detecta la causa más habitual con diferencia; el resto acotan un error genuino.
Paso 1 - Comprueba el entorno de ejecución frente a la opción target
La causa más habitual de Invalid array length y errores similares es un desajuste entre la opción target y
el entorno en el que el código se ejecuta realmente, combinado con vmSelfDefending: true.
Entornos donde se dispara:
- Node.js (ejecutando el bundle ofuscado directamente con
node) - Chrome / Chromium headless, PhantomJS
- Puppeteer, Playwright, Cypress, Selenium / ChromeDriver, Nightmare
- jsdom y otras emulaciones de DOM del lado del servidor
- Cualquier entorno donde los builtins nativos del navegador hayan sido interceptados (hooked) o reemplazados
Si tu entorno de ejecución está en esa lista, el error es la protección funcionando según lo previsto, no un bug. Elige la solución que se ajuste a tu caso:
- Ejecución en Node.js a propósito (script del lado del servidor, herramienta CLI, proceso principal de Electron): establece
target: 'node'al ofuscar. La capa de autodefensa se calibrará para Node en lugar de para el navegador. - Ejecución de pruebas automatizadas / E2E contra un build ofuscado (Cypress, Playwright, Puppeteer, Selenium): produce un build de prueba separado con
vmSelfDefending: false. La opción está diseñada para romper la automatización; no puede incluirse en una lista de permitidos para herramientas concretas. Consulta Autodefensa VM para ver la lista completa de entornos incompatibles. - Ejecución en un navegador real pero el error sigue apareciendo: confirma que ninguna extensión, script de devtools o página envolvente esté interceptando builtins nativos (
Array,Function.prototype,JSON, etc.). Reproduce en un perfil limpio antes de tratarlo como un bug.
Paso 2 - Acota hasta una única función
Si el Paso 1 no lo resolvió, el error está en una pieza concreta de código transformado. Cambia a
vmTargetFunctionsMode: 'comment' y añade /* javascript-obfuscator:vm */
a una función cada vez hasta que el error reaparezca. La función que marcaste cuando el error volvió a aparecer es la culpable:
esa es la reproducción mínima que enviarás a soporte.
Paso 3 - Envía un informe de error
Una vez que hayas confirmado que no es un desajuste entre target y autodefensa y tengas una función acotada, escribe a
support@obfuscator.io. Cuantos más de los siguientes datos incluyas, más rápido podremos solucionarlo:
- La traza de pila completa del error, exactamente como aparece en la consola, no una paráfrasis.
- Las opciones del ofuscador en JSON. Copia el objeto de opciones completo que usaste (o el nombre del preset más cualquier override). Las interacciones sutiles entre opciones son habituales, así que necesitamos el conjunto exacto.
- La versión del ofuscador, que se muestra en la esquina inferior derecha del editor.
- El entorno: navegador + versión, versión de Node.js, sistema operativo y cualquier cosa inusual del entorno de ejecución (extensiones, polyfills, builtins personalizados).
- Una reproducción mínima: idealmente la única función del Paso 2, más el punto de llamada necesario para disparar el error.
- El código fuente original (previo a la ofuscación), siempre que sea posible. La salida ofuscada también es opaca de nuestro lado; sin la entrada estaríamos aplicando ingeniería inversa a nuestro propio bytecode.
