# Обфускація звичайного JavaScript

Спрямуйте npx afterpack@latest на будь-який каталог зі згенерованим JavaScript. Не потрібні ні бандлер, ні плагін, ні файл конфігурації.

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

Без плагіна, без фреймворку, без хука бандлера. Передайте CLI каталог, і він обфускує кожен `.js`, `.mjs` і `.cjs` у ньому, на місці. Використовуйте це для зібраного вручну бандла для CDN, дерева виводу `tsc`, чистого ESM, застосунку на require.js/AMD або будь-якого `dist/` від інструмента, для якого немає пакета AfterPack.

## Встановлення

Встановлювати нічого не потрібно: запустіть CLI безпосередньо на своєму каталозі виводу.

```bash
npx afterpack@latest
```

## Збірка

[Шлях необов'язковий](https://www.afterpack.dev/uk/docs/cli#usage). Без нього CLI вибирає найновіший з `dist/`, `build/`, `out/`, `.output/` і `.next/` у робочому каталозі й повідомляє, який саме вибрав; вкажіть каталог явно, якщо результат збірки лежить деінде, а також у CI. Команда приймає каталог для обходу або один файл `.js`/`.mjs`/`.cjs`. Якщо каталог не існує або в ньому немає `.js`/`.mjs`/`.cjs`, CLI про це повідомляє і [завершується з кодом `1`](https://www.afterpack.dev/uk/docs/diagnostics#exit-codes).

Якщо ж вона помітить у вашому `package.json` [`next`](https://www.afterpack.dev/uk/docs/frameworks/nextjs), [`vite`](https://www.afterpack.dev/uk/docs/frameworks/vite), [`webpack`](https://www.afterpack.dev/uk/docs/frameworks/webpack), [`rollup`](https://www.afterpack.dev/uk/docs/frameworks/rollup) або [`esbuild`](https://www.afterpack.dev/uk/docs/frameworks/esbuild), то **після** запуску друкує однорядкову підказку про відповідний плагін.

Кожен ключ описано на сторінці [Конфігурація](https://www.afterpack.dev/uk/docs/config). На цьому шляху ключ задають у `afterpack.json` у корені проєкту, прапорцем CLI або змінною середовища. Для `complexity` оберіть один варіант:

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

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

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

Прапорці зі значенням приєднують його через `=` (`--preset=hard`, `--seed=git`); булевий прапорець без значення означає true, а `=false` вимикає його (`--build.backup`, `--directives.enabled=false`). `-h`/`--help` і `-v`/`--version` друкують довідку. [Довідник CLI](https://www.afterpack.dev/uk/docs/cli) описує повну форму команди; [Конфігурація](https://www.afterpack.dev/uk/docs/config) описує кожен ключ. Код виходу `0` у разі успіху і ненульовий у разі помилки; повний перелік у розділі [Коди виходу](https://www.afterpack.dev/uk/docs/cli#exit-codes).

Запуск записує:

- **[`.afterpack/protectionMap.html`](https://www.afterpack.dev/uk/docs/protection-map)**: одну об'єднану мапу для запуску, яка записується, коли вдалося знайти [source map](https://www.afterpack.dev/uk/docs/config#sourceMap-enabled) і збірка не працює в CI (`CI=true` або `CI=1`). [Продакшн-режим](https://www.afterpack.dev/uk/docs/config#build-mode) її не вимикає. Вона містить ваш оригінальний вихідний код, тому завжди потрапляє у внесений до gitignore `.afterpack/`, а ніколи не в каталог, який ви обфускували.
- **`foo.js.map`**: сусідній файл `.map`, коли source map увімкнено.
- **`.afterpack/backups/`**: ваші оригінали, віддзеркалені в корені проєкту разом із маніфестом, на кожному запуску. [`--build.backup=false`](https://www.afterpack.dev/uk/docs/config#build-backup) вимикає це; `npx afterpack@latest restore` скасовує запуск за цією копією.

`.afterpack/` має власний `.gitignore`, тож git його ігнорує; AfterPack ніколи не редагує ваш власний.

## Перевірка

Увімкніть [source map](https://www.afterpack.dev/uk/docs/config#sourceMap-enabled) для збірки, яку хочете оглянути (`tsc --sourceMap`, прапорець бандлера), а потім відкрийте внесений до gitignore [`.afterpack/protectionMap.html`](https://www.afterpack.dev/uk/docs/protection-map). Він містить увесь ваш вихідний код. Ніколи не комітьте його і не роздавайте з сервера.

## Параметри

Кожен [ключ конфігурації](https://www.afterpack.dev/uk/docs/config) працює і на цьому шляху; див. [Конфігурація](https://www.afterpack.dev/uk/docs/config), де описано кожен ключ і кожне місце, де його можна задати.

## Директиви

CLI не зчитує директиви: він працює на зібраному результаті, де коментарів уже немає, і відхиляє [`directives.enabled`](https://www.afterpack.dev/uk/docs/config#directives-enabled). Щоб застосувати їх, використовуйте [плагін для фреймворку](https://www.afterpack.dev/uk/docs/frameworks). Див. [Директиви](https://www.afterpack.dev/uk/docs/directives).

## Особливі випадки

- **Немає source map — менше видно.** Без знайденої карти Protection Map не має оригінального вихідного коду для відображення, і звіт запуску виходить бідним. Якщо ваша збірка може видавати source map (`tsc --sourceMap`, прапорець бандлера), увімкніть їх для збірки, яку хочете оглянути, а потім не допускайте їх у реліз.
- **Нічого не знає про фреймворки.** AfterPack бачить лише файли.

## Далі

- [Фреймворки](https://www.afterpack.dev/uk/docs/frameworks): повна таблиця.
- [Довідник CLI](https://www.afterpack.dev/uk/docs/cli): усі наведені вище прапорці повністю.
- [Збірки та CI](https://www.afterpack.dev/uk/docs/builds): сіди, dev проти продакшну, просування тих самих байтів.
- [Protection Map](https://www.afterpack.dev/uk/docs/protection-map): як читати звіт.
- [Конфігурація](https://www.afterpack.dev/uk/docs/config): кожен параметр і те, через що його можна задати.
- [Пресети](https://www.afterpack.dev/uk/docs/presets): шкала з п'яти рівнів.
