Документация
/
VM-обфускация
/

Совместимость со strict mode

Совместимость со strict mode

Важно

VM-обфускации нужно знать на этапе компиляции, выполняется ли код в строгом режиме. Если ваш код зависит от поведения строгого режима, его необходимо объявить явно.

Почему? VM компилирует ваш код в байт-код до выполнения. Ей нужно знать контекст строгого режима во время компиляции, чтобы сгенерировать корректный байт-код для поведения, специфичного для строгого режима (например, привязка this, повторяющиеся параметры, поведение объекта arguments).

Опция strictMode определяет, как решает обфускатор. При strictMode: null (по умолчанию) и strictMode: false код считается строгим только там, где это объявлено: явной директивой 'use strict';, синтаксисом ES-модулей или в методах классов. Всё остальное компилируется в нестрогом режиме. strictMode: true считает строгим весь входной код. Выбирайте значение, соответствующее контексту, в котором на самом деле выполняется итоговый бандл.

Строгий режим на уровне файла

Добавьте 'use strict'; в начало файла, чтобы включить строгий режим для всего кода:

JavaScript

Строгий режим на уровне функции

Добавьте 'use strict'; внутрь конкретных функций, если строгий режим нужен только некоторым из них:

JavaScript

Частая проблема: если ваш бандлер или инструмент сборки добавляет 'use strict'; автоматически (например, бандлер, который оборачивает исходники CommonJS или обычных скриптов в результат в строгом режиме), а вы обфусцируете исходный код до сборки бандла, VM не узнает о строгом режиме. Либо добавьте директиву в исходные файлы, либо задайте strictMode: true, либо обфусцируйте после сборки бандла.