# सादे JavaScript को obfuscate करें

npx afterpack@latest को emit किए गए JavaScript की किसी भी directory पर चलाएँ। न bundler, न plugin, न config फ़ाइल की ज़रूरत।

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

न plugin, न framework, न bundler hook। CLI को एक directory दें और यह उसके अंदर की हर `.js`, `.mjs` और `.cjs` फ़ाइल को उसी जगह obfuscate कर देता है। इसे हाथ से बनाए CDN bundle, `tsc` output tree, vanilla ESM, require.js/AMD app, या किसी ऐसे tool के किसी भी `dist/` के लिए इस्तेमाल करें जिसका कोई AfterPack package नहीं है।

## Install

Install करने को कुछ नहीं है: CLI को सीधे अपनी output directory पर चलाएँ।

```bash
npx afterpack@latest
```

## Build

[Path देना वैकल्पिक है](https://www.afterpack.dev/hi/docs/cli#usage)। न दें, तो CLI working directory में `dist/`, `build/`, `out/`, `.output/` और `.next/` में से सबसे नई चुनता है और बताता है कि उसने कौन-सी चुनी; आपका output कहीं और हो, तो directory का नाम दें, और CI में भी दें। यह चलने के लिए एक directory लेता है, या एक अकेली `.js`/`.mjs`/`.cjs` फ़ाइल। अगर directory मौजूद नहीं है, या उसमें कोई `.js`/`.mjs`/`.cjs` नहीं है, तो CLI यह बताता है और [`1` के साथ exit करता है](https://www.afterpack.dev/hi/docs/diagnostics#exit-codes)।

अगर इसे आपके `package.json` में [`next`](https://www.afterpack.dev/hi/docs/frameworks/nextjs), [`vite`](https://www.afterpack.dev/hi/docs/frameworks/vite), [`webpack`](https://www.afterpack.dev/hi/docs/frameworks/webpack), [`rollup`](https://www.afterpack.dev/hi/docs/frameworks/rollup) या [`esbuild`](https://www.afterpack.dev/hi/docs/frameworks/esbuild) दिखता है, तो यह run के **बाद** मिलते-जुलते plugin की ओर एक पंक्ति का संकेत छापता है।

हर key के लिए [Configuration](https://www.afterpack.dev/hi/docs/config) देखें। इस रास्ते पर आप key को अपने project root की `afterpack.json` में, CLI flag से, या environment variable से सेट करते हैं। `complexity` के लिए, इनमें से एक चुनें:

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

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

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

Value flags `=` लेते हैं (`--preset=hard`, `--seed=git`); boolean flag true के लिए बिना value के लिखा जाता है और बंद करने के लिए `=false` (`--build.backup`, `--directives.enabled=false`)। `-h`/`--help` और `-v`/`--version` usage छापते हैं। पूरा command रूप [CLI reference](https://www.afterpack.dev/hi/docs/cli) में है; हर key [Configuration](https://www.afterpack.dev/hi/docs/config) में। सफलता पर exit code `0` है और किसी भी विफलता पर `1`। CI में branch करने के लिए कोई और code नहीं है।

Run ये लिखता है:

- **[`.afterpack/protectionMap.html`](https://www.afterpack.dev/hi/docs/protection-map)**: run का एक संयुक्त map, जो तब लिखा जाता है जब कोई [source map](https://www.afterpack.dev/hi/docs/config#sourceMap-enabled) मिल सके और build CI (`CI=true` या `CI=1`) में न चल रही हो। [Production](https://www.afterpack.dev/hi/docs/config#build-mode) mode इसे बंद नहीं करता। इसमें आपका मूल source embedded होता है, इसलिए यह हमेशा gitignored `.afterpack/` में जाता है, कभी उस directory में नहीं जिसे आपने obfuscate किया।
- **`foo.js.map`**: एक `.map` sibling, जब maps चालू हों।
- **`.afterpack/backups/`**: आपकी मूल फ़ाइलें, project root के अंतर्गत एक manifest के साथ mirror की हुई, हर run पर। [`--build.backup=false`](https://www.afterpack.dev/hi/docs/config#build-backup) से इसे बंद करें; `npx afterpack@latest restore` इसी से run को undo करता है।

`.afterpack/` की अपनी `.gitignore` होती है, इसलिए git उसे ignore करता है; AfterPack आपकी `.gitignore` में कभी बदलाव नहीं करता।

## Verify

जिस build को आप देखना चाहते हैं, उसके लिए [source map](https://www.afterpack.dev/hi/docs/config#sourceMap-enabled) चालू करें (`tsc --sourceMap`, कोई bundler flag), फिर gitignored [`.afterpack/protectionMap.html`](https://www.afterpack.dev/hi/docs/protection-map) खोलें। इसमें आपका पूरा source होता है। इसे कभी commit या serve न करें।

## Options

हर [configuration key](https://www.afterpack.dev/hi/docs/config) इस रास्ते पर भी काम करती है; हर key और उसे सेट करने की हर जगह के लिए [Configuration](https://www.afterpack.dev/hi/docs/config) देखें।

## Directives

CLI कोई directives नहीं पढ़ता: यह built output पर चलता है, जहाँ comments हट चुके होते हैं, और [`directives.enabled`](https://www.afterpack.dev/hi/docs/config#directives-enabled) को अस्वीकार करता है। उन्हें लागू करने के लिए किसी [framework plugin](https://www.afterpack.dev/hi/docs/frameworks) का इस्तेमाल करें। देखें [Directives](https://www.afterpack.dev/hi/docs/directives)।

## Edge cases

- **Source map नहीं, तो देखने को कम।** मिलने योग्य map के बिना Protection Map के पास render करने को कोई मूल source नहीं होता, और run की report अधूरी रहती है। अगर आपकी build maps emit कर सकती है (`tsc --sourceMap`, कोई bundler flag), तो जिस build को आप देखना चाहते हैं उसके लिए उन्हें चालू करें, फिर उन्हें अपनी release से बाहर रखें।
- **Framework की कोई समझ नहीं।** AfterPack केवल फ़ाइलें देखता है।

## आगे

- [Frameworks](https://www.afterpack.dev/hi/docs/frameworks): पूरी तालिका।
- [CLI reference](https://www.afterpack.dev/hi/docs/cli): ऊपर के flags पूरी तरह।
- [Builds & CI](https://www.afterpack.dev/hi/docs/builds): seeds, dev बनाम prod, वही bytes promote करना।
- [Protection Map](https://www.afterpack.dev/hi/docs/protection-map): report पढ़ना।
- [Configuration](https://www.afterpack.dev/hi/docs/config): हर option, और कौन-सी जगह उसे सेट कर सकती है।
- [Presets](https://www.afterpack.dev/hi/docs/presets): पाँच पायदानों की सीढ़ी।
