# Presets de ofuscación

Los cinco niveles de protección de minify a extreme, el objetivo de complejidad que establece cada uno y qué garantiza ya el valor por defecto sin configuración (light).

Source: https://www.afterpack.dev/es/docs/presets

Un preset es un conjunto con nombre de transformaciones con un coste de tamaño y de ejecución conocido. Un preset más pesado aplica más transformación; no es un aumento medido de la protección. Un nombre fija el [objetivo de complejidad](https://www.afterpack.dev/es/docs/config#complexity); el tamaño de salida se deriva de ese objetivo. Fijar [`complexity`](https://www.afterpack.dev/es/docs/config#complexity) explícitamente anula el objetivo, y un valor fijado directamente siempre se aplica a cada token, incluso en `light`.

*(preset ladder diagram — see https://www.afterpack.dev/docs/presets)*

## La escala

| Preset | [`complexity`](https://www.afterpack.dev/es/docs/config#complexity) | Tamaño gzip típico | [Mínimo de cadenas](https://www.afterpack.dev/es/docs/config#strings-encode) | Úsalo cuando |
|---|---:|---:|:---:|---|
| `minify` | `0` | `1.09x` a `1.17x` | desactivado | Sin ofuscación. Los identificadores se renombran y el código se comprime; los literales de cadena siguen siendo legibles. |
| `light` | `5` | `1.29x` a `1.60x` | activado | **Por defecto.** Añade la codificación de cadenas a `minify` y reescribe la sintaxis, sin capas estructurales. La base adecuada para la mayoría de los proyectos. |
| `medium` | `7` | `6.04x` a `8.33x` | activado | Código de producción que quieres que sea claramente más difícil de seguir. |
| `hard` | `12` | `6.62x` a `9.23x` | activado | Código que importa: precios, control de acceso, comprobaciones de licencia, lógica de negocio en el cliente. |
| `extreme` | `25` | `8.25x` a `11.19x` | activado | La complejidad aplicada más alta. Dirígelo a un archivo o a una [región](https://www.afterpack.dev/es/docs/directives#what-you-can-set) en lugar de a todo el bundle. |

Tamaño de salida comprimido con gzip frente al mismo archivo ya minificado, medido en cinco bundles de producción reales ya minificados, con AfterPack 0.2.6 el 2026-10-16; el método está en [Rendimiento](https://www.afterpack.dev/es/docs/performance#output-size).

El mínimo de cadenas está activado para cualquier objetivo positivo.

## El valor por defecto es `light`

Ejecuta [`npx afterpack@latest dist/`](https://www.afterpack.dev/es/docs/cli#usage) sin [`--preset`](https://www.afterpack.dev/es/docs/config#preset), o instala un [plugin](https://www.afterpack.dev/es/docs/frameworks) sin configurar nada, y obtienes `light`.

```bash
npx afterpack@latest dist/
```

```bash
npx afterpack@latest dist/ --preset=hard    # step up
```

Los [flags](https://www.afterpack.dev/es/docs/config) unen su valor con `=`. Un valor separado por espacio se rechaza como flag desconocido.

`light` es el mínimo sin configuración. Cada literal de cadena que puede reescribir pasa por un decodificador en tiempo de ejecución. Renombra los identificadores y reescribe la sintaxis, y no añade capas estructurales. A partir del motor 0.2.3, los bucles ya no se reescriben en funciones auxiliares de callback en `minify` y `light`, lo que elimina la ralentización de 2-5x que esas funciones causaban en los bucles críticos. En `light`, los nombres de propiedades y de globales siguen pasando por constantes codificadas, lo que tiene cierto coste en código muy caliente. Algunas cadenas siguen siendo legibles en todos los presets: los prólogos de directivas, los operandos de `typeof`, los nombres de propiedad que necesita el runtime y los nombres de exportación. El [Protection Map](https://www.afterpack.dev/es/docs/protection-map) las enumera, y el motor informa del recuento y del total de bytes en cada build. Subir el preset a `medium` o superior añade trabajo estructural en cada token: inflación, remodelado del flujo de control, y cadenas y enteros vinculados a un valor compartido en tiempo de ejecución. No cambia la legibilidad de las cadenas, que ya está en su mínimo.

`minify` es el único peldaño que desactiva ese mínimo. A partir del motor 0.2.3, solo renombra los identificadores y comprime el código, sin ofuscación aplicada. El motor 0.2.2 también reescribía la sintaxis en `minify`.

## Presupuesto de tamaño

Toda salida lleva la sobrecarga fija del runtime del motor (los decodificadores y el intérprete de expresiones enteras), por lo que un archivo de unos cientos de bytes sale proporcionalmente más grande que esos rangos. Lee la proporción sobre un bundle real, no sobre un archivo pequeño.

[`inflation.max`](https://www.afterpack.dev/es/docs/config#inflation-max) no está establecido por defecto, así que el objetivo de complejidad decide por sí solo el tamaño de salida. Establécelo tú mismo solo cuando tengas un presupuesto de tamaño real que prefieras no superar. Alcanzar un valor explícito es un error: [`DIAG_SIZE_CAP_REACHED`](https://www.afterpack.dev/es/docs/diagnostics#complete-reference), sin salida, [código de salida `3`](https://www.afterpack.dev/es/docs/diagnostics#exit-codes) desde la CLI, y un build fallido desde un plugin. A partir del motor 0.2.3, nunca se escribe en su lugar una salida con menos protección: el archivo terminado se comprueba contra el límite y la codificación de cadenas siempre termina primero. En el motor 0.2.2, un límite ajustado podía detener antes la codificación de cadenas y dejar algunas cadenas legibles.

## Establecer el objetivo directamente

[`complexity`](https://www.afterpack.dev/es/docs/config#complexity) es un número no negativo sin límite superior. [`--complexity=200`](https://www.afterpack.dev/es/docs/config#complexity) es una sobrescritura válida en el [nivel Free](https://www.afterpack.dev/es/docs/tiers), muy por encima de lo que establece `extreme`.

```bash
npx afterpack@latest dist/ --preset=hard --complexity=40
```

Eso es `hard` con su objetivo de complejidad sobrescrito a 40; nada más del preset cambia. Pasar el nombre de un preset a [`--complexity`](https://www.afterpack.dev/es/docs/config#complexity) es un error.

## Aplicar un preset a una región

`--preset` establece todo el bundle de forma uniforme; eso es [Free](https://www.afterpack.dev/es/docs/tiers). Concentrar un preset más pesado en una función o un archivo es una función [Pro](https://www.afterpack.dev/es/docs/pro#what-pro-buys), mediante una [directiva en el código fuente](https://www.afterpack.dev/es/docs/directives):

```js
/* @afterpack preset=extreme */
function pricingEngine(plan, region) {
  return resolve(plan, region);
}
/* @afterpack end */
```

Las directivas son [solo comentarios de bloque](https://www.afterpack.dev/es/docs/directives#writing-one), que el plugin lee de tu código fuente. Consulta [Directivas](https://www.afterpack.dev/es/docs/directives) para la gramática y las reglas por nivel.

## Siguiente

- [Configuración](https://www.afterpack.dev/es/docs/config): cada clave que toca un preset.
- [Referencia de la CLI](https://www.afterpack.dev/es/docs/cli): los flags que seleccionan un preset.
- [Directivas](https://www.afterpack.dev/es/docs/directives): [`skip`](https://www.afterpack.dev/es/docs/config#skip) o [`preset=<name>`](https://www.afterpack.dev/es/docs/config#preset) para un tramo.
- [Cómo funciona AfterPack](https://www.afterpack.dev/es/docs/concepts): qué aporta realmente un objetivo más alto frente a un lector estático.
- [Buenas prácticas](https://www.afterpack.dev/es/docs/best-practices): qué proteger más y qué dejar sin tocar.
