Совместимость со средой
Выбирайте target под реальную среду выполнения. Сборки для браузера и для Node могут содержать разные защиты; браузерный target не заменяет Node.
target
browser- Chrome, Firefox, Safari, Edge.browser-no-eval- то же, чтоbrowser, но результат не используетeval(). Используйте, если на целевой странице действует Content Security Policy, запрещающаяeval/unsafe-eval.node- среда Node.js. Опции, специфичные для браузера, отключены (им нужныwindow/document, и в Node они ничего бы не делали или выбрасывали исключения). Часть защитvmSelfDefending, опирающихся на API, доступные только в браузере, - обнаружение headless-браузера, восстановление чистого realm через iframe, проверки против инспектора и DOM - для этого target не генерируется.service-worker- контекст Service Worker. Нетwindow, нетdocument, другой глобальный объектself.userscript- песочница менеджера пользовательских скриптов (например, Tampermonkey). ЗащитыvmSelfDefendingадаптированы под эту среду. Требуются VM-обфускация (или Parse HTML) и обфускатор v6.9.0+.bytenode- для кода, который будет скомпилирован в.jscс помощью bytenode. Требуются VM-обфускация (или Parse HTML) и обфускатор v6.13.0+.
Браузерное окружение и домены
Объявления о том, где выполняется код, должны соответствовать реальному развёртыванию. browserEnvironment должен описывать, как сборка на самом деле отдаётся (см. Browser Environment), а в VM Domain Lock должны быть перечислены все домены, с которых она отдаётся (см. VM Domain Lock). Средства автоматизации и отладчики могут вызывать срабатывание продвинутых защит; см. Тестирование и CI.
JavaScript
Имена функций и исходный текст функций могут меняться при обфускации. Не используйте .name или .toString() как стабильные данные приложения; используйте явные идентификаторы. Публичные глобальные имена могут оставаться видимыми, если этого требуют ваши настройки.
strictMode
strictMode: null и strictMode: false по-прежнему распознают явные директивы, ES-модули и методы классов как строгий код. strictMode: true считает строгим весь входной код. Ориентируйтесь на итоговый контекст выполнения: бандлер, добавляющий strict mode после обфускации, может изменить поведение.
Конвейер сборки
Скомпилируйте TypeScript или JSX и соберите приложение в бандл до финального шага обфускации. Сохраняйте при этой сборке комментарии /* javascript-obfuscator:vm */, чтобы режим комментариев мог их найти. Не минифицируйте, не форматируйте и никак иначе не переписывайте результат с Self Defending или VM Self Defending после обфускации. Source maps недоступны для VM-обфускации и обфускации HTML.
