2015-12-19 4 views
5

Mit Babel 6 versuche ich nicht"use strict" in meinem kompilierten Code zu haben.Warum fügt "transform-es2015-modules-commonjs" in Babel 6 "enable strict" hinzu?

ich gefunden habe, dass es die "transform-es2015-modules-commonjs" plugin (in "es2015" preset) ist, das, was er hinzufügt, ist.

In the source-code es scheint inherit "babel-plugin-transform-strict-mode" zu, was, wenn ich es zu entfernen, es funktioniert immer noch gut, das heißt, es die import "…" in require(…) kompiliert ohne Zugabe der „use strict“.

Warum also "transform-es2015-modules-commonjs" force strengen Modus?

Antwort

7

In der ES6 Spezifikation gibt es zwei Modi, in denen eine Datei verarbeitet werden kann:

  1. Als ein „Skript“ in der Regel alles, was wir gewohnt sind, wäre in einer Standard-JS-Umgebung

    ES6-Modul-Syntax ist nicht zulässig, und aus Gründen der Abwärtskompatibilität wird Inhalt nur dann als streng behandelt, wenn er über eine Präfix-Direktive von "use strict"; verfügt.

  2. Als "Modul"

    ES6 Modul Syntax erlaubt ist, und all Code wird automatisch strikter Modus in allen Fällen.

Da ES6 Modul Syntax mit gebunden ist, ob etwas ein Modul oder ein Skript, und wenn etwas ein „Modul“ ist es automatisch strenge ist, verwendet Babel die Präsenzen von transform-es2015-modules-commonjs beide Transformationen in derselben zu ermöglichen, Zeit.

Selbst wenn Sie nur die Modulumwandlung selbst aktivieren und den strikten Modus ausschließen würden, wäre der gesamte von Ihnen geschriebene Code technisch ungültig und sobald Sie versuchen, Ihren ES6-Code in einer echten ES6-Modulumgebung zu verwenden, wäre dies streng Egal, ob Sie es wollen oder nicht.

Wenn Sie nicht möchten, dass Ihr Code streng ist, würde ich vorschlagen, die transform-es2015-modules-commonjs Transformation zu deaktivieren und CommonJS-Module zu verwenden, da sie keine solche strict-mode-Anforderung haben.

Verwandte Themen