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

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

न 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 पर चलाएँ।

$ npx afterpack@latest

Build

Path देना वैकल्पिक है। न दें, तो CLI working directory में dist/, build/, out/, .output/ और .next/ में से सबसे नई चुनता है और बताता है कि उसने कौन-सी चुनी; आपका output कहीं और हो, तो directory का नाम दें, और CI में भी दें। यह चलने के लिए एक directory लेता है, या एक अकेली .js/.mjs/.cjs फ़ाइल। अगर directory मौजूद नहीं है, या उसमें कोई .js/.mjs/.cjs नहीं है, तो CLI यह बताता है और 1 के साथ exit करता है।

अगर इसे आपके package.json में next, vite, webpack, rollup या esbuild दिखता है, तो यह run के बाद मिलते-जुलते plugin की ओर एक पंक्ति का संकेत छापता है।

हर key के लिए Configuration देखें। इस रास्ते पर आप key को अपने project root की afterpack.json में, CLI flag से, या environment variable से सेट करते हैं। complexity के लिए, इनमें से एक चुनें:

npx afterpack@latest dist/ --complexity=40
AFTERPACK_complexity=40 npx afterpack@latest dist/
{ "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 में है; हर key Configuration में। सफलता पर exit code 0 है और किसी भी विफलता पर 1। CI में branch करने के लिए कोई और code नहीं है।

Run ये लिखता है:

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

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

Verify

जिस build को आप देखना चाहते हैं, उसके लिए source map चालू करें (tsc --sourceMap, कोई bundler flag), फिर gitignored .afterpack/protectionMap.html खोलें। इसमें आपका पूरा source होता है। इसे कभी commit या serve न करें।

Options

हर configuration key इस रास्ते पर भी काम करती है; हर key और उसे सेट करने की हर जगह के लिए Configuration देखें।

Directives

CLI कोई directives नहीं पढ़ता: यह built output पर चलता है, जहाँ comments हट चुके होते हैं, और directives.enabled को अस्वीकार करता है। उन्हें लागू करने के लिए किसी framework plugin का इस्तेमाल करें। देखें Directives।

Edge cases

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

आगे

  • Frameworks: पूरी तालिका।
  • CLI reference: ऊपर के flags पूरी तरह।
  • Builds & CI: seeds, dev बनाम prod, वही bytes promote करना।
  • Protection Map: report पढ़ना।
  • Configuration: हर option, और कौन-सी जगह उसे सेट कर सकती है।
  • Presets: पाँच पायदानों की सीढ़ी।