Документация
/

Совместимость со средой

Совместимость со средой

Выбирайте 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.