# Ofusca JavaScript sin framework

Apunta npx afterpack@latest a cualquier directorio de JavaScript emitido. Sin bundler, sin plugin y sin archivo de configuración.

Source: https://www.afterpack.dev/es/docs/frameworks/plain

Sin plugin, sin framework, sin hook de bundler. Dale a la CLI un directorio y ofuscará en el sitio cada `.js`, `.mjs` y `.cjs` que contenga. Úsala para un bundle de CDN montado a mano, un árbol de salida de `tsc`, ESM puro, una app require.js/AMD o cualquier `dist/` de una herramienta que no tenga paquete de AfterPack.

## Instalación

No hay nada que instalar: ejecuta la CLI directamente sobre tu directorio de salida.

```bash
npx afterpack@latest
```

## Build

La [ruta es opcional](https://www.afterpack.dev/es/docs/cli#usage). Sin ella, la CLI elige el más reciente entre `dist/`, `build/`, `out/`, `.output/` y `.next/` en el directorio de trabajo e indica cuál ha elegido; indica el directorio cuando tu salida esté en otro lugar, y también en CI. Acepta un directorio que recorrer o un único archivo `.js`/`.mjs`/`.cjs`. Si el directorio no existe o no contiene ningún `.js`/`.mjs`/`.cjs`, la CLI lo indica y [sale con `1`](https://www.afterpack.dev/es/docs/diagnostics#exit-codes).

Si detecta [`next`](https://www.afterpack.dev/es/docs/frameworks/nextjs), [`vite`](https://www.afterpack.dev/es/docs/frameworks/vite), [`webpack`](https://www.afterpack.dev/es/docs/frameworks/webpack), [`rollup`](https://www.afterpack.dev/es/docs/frameworks/rollup) o [`esbuild`](https://www.afterpack.dev/es/docs/frameworks/esbuild) en tu `package.json`, imprime **después** de la ejecución una línea que sugiere el plugin correspondiente.

Consulta [Configuración](https://www.afterpack.dev/es/docs/config) para ver cada clave. Por esta vía, las estableces en `afterpack.json` en la raíz de tu proyecto, con un flag de la CLI o con una variable de entorno. Para `complexity`, elige una:

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

```bash
AFTERPACK_complexity=40 npx afterpack@latest dist/
```

```json
{ "complexity": 40 }
```

Los flags con valor usan `=` (`--preset=hard`, `--seed=git`); un flag booleano se escribe solo para `true` y con `=false` para desactivarlo (`--build.backup`, `--directives.enabled=false`). `-h`/`--help` y `-v`/`--version` imprimen el uso. La [referencia de la CLI](https://www.afterpack.dev/es/docs/cli) tiene la forma completa del comando; [Configuración](https://www.afterpack.dev/es/docs/config) tiene cada clave. El código de salida es `0` si todo va bien y distinto de cero ante un fallo; [Códigos de salida](https://www.afterpack.dev/es/docs/cli#exit-codes) los enumera todos.

La ejecución escribe:

- **[`.afterpack/protectionMap.html`](https://www.afterpack.dev/es/docs/protection-map)**: un único mapa combinado para la ejecución, que se escribe cuando se pudo encontrar un [source map](https://www.afterpack.dev/es/docs/config#sourceMap-enabled) y el build no se ejecuta en CI (`CI=true` o `CI=1`). El modo de [producción](https://www.afterpack.dev/es/docs/config#build-mode) no lo desactiva. Incrusta tu código fuente original, así que siempre se guarda en `.afterpack/`, ignorado por git, y nunca en el directorio que ofuscaste.
- **`foo.js.map`**: un `.map` junto al archivo, cuando los maps están activados.
- **`.afterpack/backups/`**: tus originales, replicados bajo la raíz del proyecto con un manifiesto, en cada ejecución. [`--build.backup=false`](https://www.afterpack.dev/es/docs/config#build-backup) lo desactiva; `npx afterpack@latest restore` deshace la ejecución a partir de él.

`.afterpack/` lleva su propio `.gitignore`, así que git lo ignora; AfterPack nunca edita el tuyo.

## Verificación

Activa un [source map](https://www.afterpack.dev/es/docs/config#sourceMap-enabled) en el build que quieras inspeccionar (`tsc --sourceMap`, un flag del bundler) y abre después [`.afterpack/protectionMap.html`](https://www.afterpack.dev/es/docs/protection-map), ignorado por git. Contiene todo tu código fuente. Nunca lo subas al repositorio ni lo sirvas.

## Opciones

Cualquier [clave de configuración](https://www.afterpack.dev/es/docs/config) funciona también por esta vía; consulta [Configuración](https://www.afterpack.dev/es/docs/config) para ver cada clave y cada lugar donde puede establecerse.

## Directivas

La CLI no lee directivas: se ejecuta sobre la salida del build, donde los comentarios ya no están, y rechaza [`directives.enabled`](https://www.afterpack.dev/es/docs/config#directives-enabled). Usa un [plugin de framework](https://www.afterpack.dev/es/docs/frameworks) para aplicarlas. Consulta [Directivas](https://www.afterpack.dev/es/docs/directives).

## Casos límite

- **Sin source map, hay menos que ver.** Sin un map que se pueda encontrar, el Protection Map no tiene código fuente original que mostrar y el informe de la ejecución queda escaso. Si tu build puede emitir maps (`tsc --sourceMap`, un flag del bundler), actívalos en el build que quieras inspeccionar y mantenlos fuera de tu versión publicada.
- **Nada específico de frameworks.** AfterPack ve archivos.

## Siguiente

- [Frameworks](https://www.afterpack.dev/es/docs/frameworks): la matriz completa.
- [Referencia de la CLI](https://www.afterpack.dev/es/docs/cli): los flags anteriores al completo.
- [Builds y CI](https://www.afterpack.dev/es/docs/builds): semillas, desarrollo frente a producción y promocionar los mismos bytes.
- [Protection Map](https://www.afterpack.dev/es/docs/protection-map): cómo leer el informe.
- [Configuración](https://www.afterpack.dev/es/docs/config): cada opción y qué superficie puede establecerla.
- [Presets](https://www.afterpack.dev/es/docs/presets): la escala de cinco peldaños.
