Dokumentacja
/
Obfuskacja VM
/

Zgodność z trybem strict

Zgodność z trybem strict

Ważne

Obfuskacja VM musi już na etapie kompilacji wiedzieć, czy kod działa w trybie strict. Jeśli Twój kod polega na zachowaniu trybu strict, musisz go jawnie zadeklarować.

Dlaczego? VM kompiluje Twój kod do kodu bajtowego przed wykonaniem. Podczas kompilacji musi znać kontekst trybu strict, aby wygenerować poprawny kod bajtowy dla zachowań specyficznych dla tego trybu (np. wiązania this, zduplikowanych parametrów, zachowania obiektu arguments).

Opcja strictMode określa, jak obfuskator podejmuje tę decyzję. Przy strictMode: null (domyślnie) i strictMode: false kod jest traktowany jako strict tylko tam, gdzie to deklaruje: przez jawną dyrektywę 'use strict';, składnię modułów ES lub metody klas. Cała reszta jest kompilowana w trybie niestrict (sloppy). strictMode: true traktuje całe wejście jako kod w trybie strict. Dopasuj ustawienie do kontekstu, w którym faktycznie działa końcowy bundle.

Tryb strict na poziomie pliku

Dodaj 'use strict'; na początku pliku, aby włączyć tryb strict dla całego kodu:

JavaScript

Tryb strict na poziomie funkcji

Jeśli trybu strict potrzebują tylko niektóre funkcje, dodaj 'use strict'; wewnątrz tych funkcji:

JavaScript

Częsty problem: jeśli bundler lub narzędzie do budowania automatycznie dodaje 'use strict'; (na przykład bundler, który opakowuje źródła CommonJS lub zwykłe skrypty w wynik w trybie strict), a Ty obfuskujesz kod źródłowy przed zbudowaniem bundle'a, VM nie będzie wiedzieć o trybie strict. Dodaj dyrektywę do plików źródłowych, ustaw strictMode: true albo obfuskuj po zbudowaniu bundle'a.