Documentazione
/
Offuscamento VM
/

Compatibilità con la strict mode

Compatibilità con la strict mode

Importante

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:

JavaScript

Strict mode a livello di funzione

Aggiungi 'use strict'; all'interno di funzioni specifiche se solo alcune funzioni necessitano della strict mode:

JavaScript

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.