Documentación
/
Recetas
/

Evitar colisiones de identificadores

Cómo evitar colisiones de identificadores entre archivos ofuscados

Cuando varios archivos ofuscados con la VM acaban en el mismo bundle, pueden declarar el mismo identificador de nivel superior y romper la página en el momento del parseo. Aquí explicamos por qué ocurre y cómo solucionarlo.

El síntoma

Tu build se ejecuta sin problemas, pero el navegador lanza un error en el momento del parseo, antes de que arranque la aplicación:

browser console

Error

Una comprobación rápida en el bundle confirma que el mismo identificador está declarado en más de un chunk:

terminal

Shell

Por qué ocurre

Por defecto, la ofuscación VM usa el generador de nombres de identificadores mangled-shuffled. Recorre un pequeño alfabeto en un orden barajado determinista y añade un prefijo vm a las globales introducidas por el runtime. Ambos archivos emiten identificadores de la misma secuencia barajada, así que la primera global de cada archivo comparte un nombre, la segunda comparte otro, y así sucesivamente.

Cada archivo se ofusca de forma independiente y el generador reinicia desde el principio de su secuencia para cada uno. Cuando dos archivos acaban en el mismo bundle, los nombres colisionan. Dos declaraciones const vmd = … de nivel superior aterrizan en el mismo ámbito y el parser rechaza la segunda.

Soluciones

Elige una de las siguientes; la primera opción es la solución recomendada:

  • Activa randomIdentifiersPrefix (recomendado)

    Cada ejecución de ofuscación recibe un prefijo aleatorio único que se antepone a cada identificador generado. Los nombres de archivos distintos ya no comparten un espacio de nombres, por lo que las colisiones desaparecen sin que tengas que coordinar prefijos a mano.

  • Establece un identifiersPrefix único por archivo

    Pasa manualmente un prefijo distinto al ofuscar cada archivo (por ejemplo, identifiersPrefix: 'auth_' para uno, checkout_ para otro). Es eficaz, pero propenso a errores si tienes muchos archivos; prefiere la opción aleatoria anterior.

  • Cambia identifierNamesGenerator a hexadecimal

    Los nombres hexadecimales usan un espacio de claves mucho mayor, por lo que la probabilidad de que dos archivos produzcan el mismo identificador es prácticamente nula. Compensación: los identificadores son más largos que la salida de mangled-shuffled, así que el bundle es ligeramente más grande.

  • Usa un plugin de bundler o la interfaz de lotes multiarchivo

    La mayoría de los plugins oficiales de bundlers (webpack, Rollup, Vite) gestionan la unicidad de los prefijos automáticamente entre archivos de un build. La interfaz de obfuscator.io también lo gestiona cuando usas la ofuscación por lotes multiarchivo. Si estás integrando la ofuscación manualmente con la API de npm, tienes que optar por el prefijo aleatorio tú mismo.

Opciones relacionadas