Free є базовим рівнем: повний каталог трансформацій, рівномірно застосований до всього бандла, на вашій машині, безкоштовно. Pro призначений для бандла, який не однорідний, коли одна перевірка ліцензії, одна процедура ціноутворення чи одні вбудовані облікові дані цінніші за весь код довкола.
Pro змінює те, куди потрапляє захист і наскільки точно. Сили жодної окремої трансформації він не змінює. Обидва тарифи можуть піднімати complexity настільки високо, наскільки дозволяє ваш бюджет розміру.
Що вже дає Free
Це не урізана пробна версія. Free запускає повний конвеєр: complexity не обмежена, і доступний кожен пресет на шкалі.
- Кожен пресет:
minify(ціль 0),light(5),medium(7),hard(12),extreme(25), а також будь-яке числове цільове значення, яке ви задасте. За замовчуванням дієlight. - Кожна трансформація. Пониження літералів, сплощення потоку керування, непрозорі предикати, змішана булево-арифметична логіка, байт-код цілочислових виразів, матеріалізація констант, поглиблення областей видимості, переплетення перехресних залежностей.
- Нова структура в кожній збірці. Не задавайте сід, щоб отримувати новий для кожної збірки; закріплюйте його, коли потрібен відтворюваний результат.
- Усе інше, чого ви очікуєте: Protection Map, source map, плагіни для фреймворків, виявлення фреймворків. Жодного облікового запису, жодного ключа, жодного мережевого виклику для самої обфускації.
- Зручний для відлагодження за замовчуванням. Devtools, точки зупину,
console.logі вирази спостереження продовжують працювати. Якщо збірка щось повідомляє, див. Діагностика.
Розмір результату зростає разом із пресетом; виміряні розміри наведено на сторінці Продуктивність. Pro дає змогу витрачати цей розмір лише там, де це окупається, замість того щоб піднімати пресет для всього бандла.
Що дає Pro
Захист, який можна націлити
На Free ваша конфігурація однаково застосовується до кожного вузла бандла. На Pro позначена ділянка перевизначає ваші глобальні налаштування.
На практиці це означає, що можна залишити бандл на light заради швидких збірок і малого результату і все одно поставити extreme на ті двадцять рядків, які справді мають значення:
/* @afterpack preset=hard */
function verifyLicense(token) {
// raised to complexity target 12, string floor forced on
}
/* @afterpack end */
/* @afterpack skip */
function debugPanel() {
// target 0, floor off — left alone
}
/* @afterpack end */Ділянки задаються блоковими коментарями @afterpack. Плагін зчитує директиви з вашого вихідного коду.
Що може задати директива: будь-який параметр, який застосовується до окремої ділянки.
Зчитує їх плагін: @afterpack/next, @afterpack/vite, @afterpack/webpack або решта. Збірка Pro, запущена через npx afterpack@latest <path>, отримує захист Pro для всього бандла, без ділянок: CLI працює на зібраному результаті, де коментарів уже немає, тож не зчитує директиви і відхиляє directives.enabled.
Посилення для шляхів ліцензування та оплати
Два захисти, які можна ввімкнути і які збірки Free не застосовують:
| Налаштування | Що воно робить для вас |
|---|---|
transforms.selfIntegrity.enabled | Додає перевірку над власною таблицею перевірок і виявляє зміни лише в цій таблиці. Зміну деінде у вашому коді не виявлено. Без втручання нічого не змінює. |
transforms.comparisonHardening.enabled | Перевірка рівності рядків стає односторонньою перевіркою дайджесту, тож літерала, з яким ви порівнюєте, в артефакті немає взагалі. |
Обидва за замовчуванням вимкнені. Підтвердження позначеного патерну рефлексії працює однаково на обох тарифах: reflection.allow у вашій конфігурації. Його не можна задати директивою.
Збірки виконуються на інфраструктурі AfterPack
key спрямовує файли вашої збірки до хмари AfterPack, яка повертає захищений результат, щойно готовий кожен файл. Нічого додатково встановлювати й нічого оновлювати.
Вихідний код обробляється в пам'яті і не зберігається. Що змінюється, коли рушій переноситься, див. у розділі Режими розгортання.
Запис про кожну збірку
Хмарна збірка є записаною збіркою. AfterPack зберігає Protection Map цієї збірки та рядок підсумкових метрик, тож дашборд може показати мапу, діагностику і таймінги будь-якої недавньої збірки. Це відповідає на питання «чи справді той реліз був захищений?» без повторного запуску. Зберігання налаштовується для кожного проєкту і його можна вимкнути. Строк зберігання становить один рік і останні 500 збірок на проєкт, залежно від того, що закінчиться раніше. Використання обліковується в мегабайтах. Див. Скільки коштує Pro.
Повна матриця можливостей для кожного тарифу наведена в розділі Плани та тарифи.
Скільки коштує Pro
Pro тарифікує використання, а не місця. Ви купуєте MB JavaScript, які обробляє хмарний рушій: не збірки, не файли, не запити. Кожен тариф, зокрема Free, має необмежену кількість учасників робочого простору.
Ключ Pro спрямовує весь ваш клієнтський бандл через хмарний рушій, і кожен оброблений байт враховується, зокрема код поза вашими позначеними ділянками. Клієнтський бандл Next.js розміром 1.5 MB використовує 1.5 MB місячного ліміту на кожній збірці.
Отримати потужність Pro можна трьома способами:
- Free із реєстрацією: 10 MB на місяць, без картки. Достатньо, щоб застосувати точкові можливості до реального бандла і порівняти результат. Див. Облікові записи.
- Extra MB: $5 за 20 MB, разово. Ніколи не згорає, ніколи не поновлюється автоматично, а покупка не запускає підписку. Проєкт, який випускає реліз раз на кілька тижнів, може працювати лише на поповненнях.
- План від $49/міс, коли обсяг робить його вигіднішим. Indie включає 500 MB на місяць, Team 3 GB, Studio 8 GB, кожен з автоматичним перевищенням з оплатою за MB, щоб напружений спринт не валив CI. Indie і Team мають 14-денний пробний період.
Збірка витрачає ліміт плану, потім Extra MB, потім перевищення, саме в такому порядку, тож поповнення стоїть за вашим місячним лімітом, а не витрачається першим. Ціни, обмеження на кількість проєктів, ставки перевищення та ліміт витрат наведено в розділі Плани та тарифи.
Для порівняння: типовий продакшн-бандл SPA важить від кількох сотень KB до кількох MB. Безкоштовних 10 MB вистачає на кілька реальних збірок, а 500 MB в Indie — на кілька сотень.
Незабаром
Зараз недоступно. Це пункти Pro з публічної дорожньої карти, де AfterPack повідомляє, що готується, без жодних дат.
| Можливість | Що вона додасть |
|---|---|
| Обфускація між модулями | Переплетення через межі модулів, а не лише в межах файлу. |
| Маскування мережевого транспорту | Кодек для кожної збірки для ваших API-запитів і відповідей у мережі. |
| Керовані source map | Символізація продакшн-стек-трейсів через автентифікований пошук, без публікації будь-якої мапи. |
Що робить налаштування лише для Pro у збірці Free
Збірка Free зупиняється на директиві для ділянки, яка посилює захист, замість того щоб застосувати слабший захист, ніж вимагав вихідний код, а будь-яку іншу директиву ігнорує. Два налаштування посилення вище просто не застосовуються. Збірка Pro, яка не може достукатися до хмари, зупиняється з помилкою (fail closed).
Далі
- Режими розгортання: де виконується кожен тариф і що на практиці означає зупинка з помилкою (fail closed).
- Довідник Cloud API: мережевий контракт, що стоїть за кожною збіркою Pro.
- Тарифи: ціни, ліміти в MB і коли підходить кожен план.
- Protection Map: що показує мапа збірки і де вона зберігається. Відкрийте живе демо.
- Директиви: повна граматика позначок ділянок вище.
- Конфігурація: кожен ключ, прапорець, змінна і директива в одному місці.
- Збірки в дашборді: як записана хмарна збірка виглядає потім.