2015-12-19 8 views
5

Utilizzando Babel 6, sto cercando non per avere "use strict" nel mio codice compilato.Perché "transform-es2015-modules-commonjs" aggiunge "usa strict" in Babel 6?

ho scoperto che è il "transform-es2015-modules-commonjs" plugin (in "es2015" preset), che è quello che aggiunge.

In the source-code sembra inherit "babel-plugin-transform-strict-mode", che se tolgo, funziona ancora bene, cioè compila il import "…" in require(…) senza aggiungere la "use strict".

Quindi, perché "transform-es2015-modules-commonjs" forza modalità strict?

risposta

7

Nella specifica ES6, ci sono due modi in cui un file può essere trattati:

  1. Come un "script" che sarebbe generalmente tutto quello che siamo abituati a in un ambiente standard JS

    La sintassi del modulo ES6 non è consentita e, per motivi di compatibilità con le versioni precedenti, il contenuto viene trattato come rigoroso solo se ha una direttiva di prefisso "use strict";.

  2. Come un "modulo" sintassi modulo

    ES6 è permesso, e tutto il codice è automaticamente la modalità rigorosa in tutti i casi.

perché la sintassi del modulo ES6 è legato con se qualcosa è un modulo o di uno script, e se qualcosa è un "modulo" viene automaticamente rigorosa, Babel utilizza le presenze di transform-es2015-modules-commonjs attivare entrambe le trasformazioni allo stesso tempo.

Anche se si abilitasse solo la trasformazione del modulo stessa ed escludesse la modalità rigorosa, tutto il codice che si scrive sarebbe tecnicamente non valido e non appena si tentasse di utilizzare il codice ES6 in un vero ambiente di modulo ES6, sarebbe rigoroso che ti piaccia o no.

Se non si desidera che il codice sia rigoroso, suggerirei di disabilitare la trasformazione transform-es2015-modules-commonjs e l'utilizzo di moduli CommonJS, poiché non hanno tale requisito in modalità rigorosa.