Compatibilità con la strict mode
L'offuscamento VM deve sapere in fase di compilazione se il codice viene eseguito in strict mode. Se il tuo codice si basa sul comportamento della strict mode, devi dichiararlo esplicitamente.
Perché? La VM compila il tuo codice in bytecode prima dell'esecuzione. Durante la compilazione deve conoscere il
contesto della strict mode per generare bytecode corretto per i comportamenti specifici della strict mode (ad esempio il binding di this, i parametri
duplicati, il comportamento dell'oggetto arguments).
L'opzione strictMode controlla il modo in cui decide l'offuscatore. Con strictMode: null (predefinito) e strictMode: false, il codice viene trattato come strict solo dove lo dichiara: una direttiva esplicita 'use strict';, la sintassi dei moduli ES o i metodi di classe. Tutto il resto viene compilato in sloppy mode. strictMode: true tratta tutto l'input come strict. Fai corrispondere l'impostazione al contesto in cui viene effettivamente eseguito il bundle finale.
Strict mode a livello di file
Aggiungi 'use strict'; all'inizio del file per attivare la strict mode per tutto il codice:
Strict mode a livello di funzione
Aggiungi 'use strict'; all'interno di funzioni specifiche se solo alcune funzioni necessitano della strict mode:
Problema comune: se il tuo bundler o strumento di build aggiunge automaticamente 'use strict'; (ad esempio un bundler che avvolge
sorgenti CommonJS o script semplici in un output in strict mode), ma offuschi il sorgente prima del bundling, la VM non
saprà della strict mode. Aggiungi la direttiva ai file sorgente, imposta strictMode: true oppure offusca dopo il
bundling.
