Ofuscación de JavaScript para tu framework

Qué paquete instalar para tu stack, dónde se engancha y qué escribe.

AfterPack ofusca el JavaScript que produjo tu bundler. Instala el paquete de tu stack y tu build habitual emitirá salida ofuscada. Para cualquier otro caso, ejecuta npx afterpack@latest sobre la salida del build.

Matriz de frameworks

FrameworkPaqueteCómo se conectaDónde se ejecutaSalida del build
Next.js@afterpack/nextwithAfterpack(config)runAfterProductionCompile, dentro de next build, después de que Next escriba los chunks.next/static/chunks, out/
Vite@afterpack/viteafterpackVite() en pluginsgenerateBundle, en el pipelinebuild.outDir
Webpack@afterpack/webpacknew AfterpackWebpackPlugin()compilation.hooks.processAssets, en el pipelineoutput.path
Rollup@afterpack/rollupafterpackRollup() en pluginsgenerateBundle, en el pipelineoutput.dir o output.file
esbuild@afterpack/esbuildafterpackEsbuild() en pluginsonEnd, después de que esbuild escribeoutdir o outfile
Astro@afterpack/astroafterpack() en integrations@afterpack/vite dentro de la configuración de Vite de Astrodist/
Svelte@afterpack/svelteafterpackSvelte() en plugins@afterpack/vitedist/
SvelteKit@afterpack/sveltekitafterpackSveltekit() después de sveltekit()@afterpack/vitesalida del adaptador (build/)
Vue 3@afterpack/vueafterpackVue() después de vue()@afterpack/vitedist/
Nuxt 3@afterpack/nuxtmodules: ["@afterpack/nuxt"]@afterpack/vite sobre la configuración de Vite de Nuxt.output/public/_nuxt/
Angular v17+@afterpack/angularafterpackAngular() en un script postbuilduna pasada postbuild, después de que ng build escribedist/<app>/browser
Electron@afterpack/electronwithAfterpack(config) alrededor de electron-vite@afterpack/vite en las tres partes, con una sola semillael out/ de cada parte
Parcel@afterpack/parcel-optimizeruna entrada en optimizers de .parcelrcun Optimizer de Parcel 2, por bundle, en el pipelineel distDir de Parcel

Astro, Svelte, SvelteKit, Vue, Nuxt y Angular instalan @afterpack/vite, o ejecutan la misma pasada compartida, así que no tienes que conectarlo a mano.

Sin plugin

StackRuta
Remix / React Router v7Se basa en Vite: usa @afterpack/vite o la CLI.
JS sin frameworkNo hay bundler en el que engancharse: npx afterpack@latest <dir>.

Qué hace cada integración

Los valores por defecto están en el Inicio rápido. Además de esos, todos los plugins y la CLI comparten este comportamiento:

  • Se detecta el modo de build. NODE_ENV=production o CI=true selecciona producción, lo que desactiva la emisión de source maps. Un mapa publicado revierte la ofuscación.
  • Los mismos artefactos. Un único protectionMap.html combinado en .afterpack/, ignorado por git, y un .map junto a cada archivo cuando los mapas están activados. .afterpack/ lleva su propio .gitignore; el tuyo nunca se edita. build.backup tiene dos formas: la CLI replica tus originales en .afterpack/backup/ en cada ejecución, y un plugin que ofusca archivos en disco (@afterpack/next, @afterpack/esbuild, @afterpack/angular) escribe un .backup.<hash> al lado de la salida cuando lo pides. Los plugins que actúan dentro del pipeline no tienen ningún archivo emitido junto al que dejar una copia de seguridad, y avisan cuando la pides.
  • Un solo interruptor para omitir una ejecución. build.autorun: false mantiene el plugin instalado y omite el motor.
  • El plugin lee las directivas de tu código fuente, en todas las integraciones que tienen un hook desde el que leerlas. Angular rechaza la clave directamente: su builder está sellado, así que la pasada solo ve salida ya minificada. La CLI la rechaza por la misma razón.

Siguiente