Astro компілює кожен острів і кожен клієнтський бандл через власний Vite-конвеєр, а AfterPack інтегрується на рівні бандлера. @afterpack/astro існує для того, щоб вам не довелося вручну прописувати vite: { plugins: [...] }.
Усе відбувається в generateBundle пакета @afterpack/vite, усередині власного Vite-конвеєра Astro.
Встановлення
$ npm install -D @afterpack/astro// astro.config.mjs
import { defineConfig } from "astro/config";
import afterpack from "@afterpack/astro";
export default defineConfig({
integrations: [afterpack()],
});Експорт за замовчуванням і іменований експорт afterpackAstro є однією й тією самою функцією.
Збірка
Тепер astro build видає обфускований результат. astro dev не зачіпається, бо плагін працює лише в generateBundle збірки, тобто в хуку, який завжди використовує @afterpack/vite. Astro записує обфусковані чанки; оригінали ніколи не потрапляють у dist/.
Обфускується JavaScript, який видає Astro: бандли островів і клієнтські скрипти, зазвичай у dist/_astro/. Серверна логіка шаблонів .astro, яка ніколи не стає клієнтським JS, сюди не входить.
Перевірка
astro build працює в продакшн-режимі збірки, тож запитуйте Protection Map явно, коли хочете її переглянути:
integrations: [afterpack({ protectionMap: { enabled: true } })],Вона записується в .afterpack/protectionMap.html, внесений у gitignore. Побічний ефект із source map і правила поводження з ним ті самі, що в @afterpack/vite.
entitlements.js, 54 lines, built at the light preset with a directive around the signature check. Click any token to see what was applied to it.Параметри
Кожен ключ конфігурації можна передати тут в об'єкті параметрів, який дослівно пересилається в @afterpack/vite, наприклад afterpack({ preset: "hard", complexity: 40 }). Псевдонім типу AfterpackAstroOptions дорівнює AfterpackViteOptions:
integrations: [afterpack({ seed: "git", preset: "medium" })],Директиви
Плагін зчитує директиви з вашого вихідного коду до мініфікації. Лише блокові коментарі:
Директиви всередині самих файлів компонентів .astro не захоплюються. Розміщуйте директиву у файлі .jsx/.tsx острова:
/* @afterpack preset=hard */
export function LicenseGate({ token }) {
// ...
}
/* @afterpack end */Далі
- Фреймворки: повна матриця.
- Vite: плагін, який виконує основну роботу.
- Protection Map: як читати звіт.
- Директиви: повна граматика маркерів.
- Збірки та CI: сіди, dev проти prod, просування тих самих байтів.