@afterpack/rollup віддзеркалює @afterpack/vite: Vite побудований на Rollup, тож застосовується той самий підхід. Плагін зчитує директиви з вашого вихідного коду, а потім запускає рушій у generateBundle, коли готовий бандл перебуває в пам'яті і Rollup ще нічого з нього не записав.
Встановлення
$ npm install -D @afterpack/rollup// rollup.config.mjs
import { afterpackRollup } from "@afterpack/rollup";
export default {
input: "src/index.js",
output: { dir: "dist", format: "es", sourcemap: true },
plugins: [afterpackRollup()],
};Іменований експорт: afterpackRollup.
Збірка
Плагін запускається в generateBundle з order: "post", тож він останній хук, що торкається бандла. Він обфускує кожен JavaScript-чанк у бандлі й повертає їх, тож Rollup записує обфусковані чанки і ніколи не записує оригінали. Невдала обфускація залишає каталог виводу таким, яким він був.
Перевірка
Запитайте Protection Map явно в продакшн-збірці:
afterpackRollup({ protectionMap: { enabled: true } });Вона записується в .afterpack/protectionMap.html, внесений у gitignore. Коли output.sourcemap увімкнено, вона відображає ваш оригінальний вихідний код; без нього відображати нема з чого, і прохід про це повідомляє. Звіт містить увесь ваш вихідний код. Ніколи не комітьте його і не роздавайте з сервера.
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.Параметри
Будь-який ключ конфігурації можна передати тут в об'єкті параметрів, наприклад afterpackRollup({ preset: "hard", complexity: 40 }).
Директиви
Плагін зчитує директиви з вашого вихідного коду до мініфікації, тож директива переживає бандлінг.
/* @afterpack preset=hard */
export function signRequest(payload) {
// ...
}
/* @afterpack end */Зчитування пропускає node_modules, віртуальні модулі та файли, що не є JS/TS. Граматика скрізь однакова.
Особливі випадки
Кілька виводів
Конфігурація з двома виводами запускає generateBundle один раз для кожного виводу, і кожен запуск бачить лише свій бандл. Нічого не обфускується двічі, незалежно від того, в які каталоги пишуть виводи:
output: [
{ dir: "dist/esm", format: "es", entryFileNames: "lib.js" },
{ dir: "dist/cjs", format: "cjs", entryFileNames: "lib.cjs" },
],
plugins: [afterpackRollup({ seed: "git" })],Закріпіть один seed для виводів, які публікуються разом.
Збірки бібліотек
AfterPack працює з бандлом, який зібрав Rollup, тож кожне експортоване ім'я, яке імпортують ваші споживачі, зберігається так, як написано; перейменовуються та перебудовуються лише внутрішні частини.
Далі
- Фреймворки: повна матриця.
- Vite: ті самі хуки, з розв'язанням конфігурації Vite.
- Збірки та CI: сіди, dev проти prod, просування тих самих байтів.
- Protection Map: як читати звіт.
- Директиви: кожен ключ позначки і що він робить.
- Конфігурація: поверхня конфігурації рушія.