Frage

Wenn Sie das Modul Muster verwendet werden soll und so etwas wie folgt aus:

(function () {
   "use strict";
   // this function is strict...
}());

und kompilieren Sie den Code, um die Google Closure Compiler verwenden, die "use strict"; Richtlinie wird es nicht die kompilierte Datei machen in.

So wie Sie verhindern, dass Sie die Closure Compiler aus der ES5 / strengen Richtlinie zu entfernen?

(Beachten Sie, dass ich nicht die andere Art der Durchsetzung ES5 / Strict-Modus verwenden will, die einfach hinzufügen die „use strict“;. In der ersten Zeile der kompilierte Datei Ich mag das Modul Muster verwenden wie hier . )

War es hilfreich?

Lösung

Dies ist nicht die größte Antwort, aber soweit ich das sagen kann, ist ein bekanntes Problem oder „Feature“ (je nach Perspektive) Verschluss Compiler. Hier ist ein teilweise Erklärung einige der Probleme. Ein paar erwähnt sind, dass es keine Möglichkeit gibt, auf Dateiebene strikte Modus Erklärungen zu erhalten, wenn mehrere Dateien kombiniert werden, und die Funktion des Compiler-Funktion inlining würde den Rahmen der Funktionsebene strikten Modus Erklärungen brechen. Da das Verhalten von Erklärungen „use strict“ würde in kompilierten Code unvorhersehbar / falsch sein (möglicherweise Programme brechen, wenn strenge Modus nicht-strengen Code falsch angewandt wird), der Compiler sie wie alle anderen toten Code-Streifen.

Es scheint eine Idee zu haben, um vollständig ECMAScript 5 Strict-Modus prüft im Compiler zu implementieren (wobei in diesem Fall keinen Nachteil wäre es von kompilierten Code zu entfernen), aber es ist noch nicht da.

Kompilieren in SIMPLE_OPTIMIZATIONS Modus statt ADVANCED_OPTIMIZATIONS wird tote Code Entfernung deaktivieren, aber ich vermute, dass Sie bereits wissen.

Andere Tipps

Dangerous . Closure Compiler im erweiterten Modus ist nicht streng-Modus kompatibel, was bedeutet, dass der Compiler Code neu schreiben wird basierend auf ECMAScript 262 rev 3 Regeln. Einige Regeln werden geändert für streng-Modus (zum Beispiel „this“ in anonymen Funktionen Bindung, Umfang Auflösung etc.), den Code zum Bruch führen, wenn Closure Compiler neu geschrieben Code falsch aufgrund falscher Sprache Annahmen.

Die kurze Antwort (und der offizielle Antwort des Closure Compiler) ist. Tut es nicht

Wenn Sie wirklich nur ein "use strict" string schaufeln wollen, versuchen Sie:

eval('"use strict";');

können Sie den Ausgabe-Wrapper Compiler verwenden, um den Modul-Wrapper und umfassen die „use strict“ Richtlinie dort zu schaffen.

Strict-Modus ist nützlich für das Debuggen, und sonst nicht viel, bis er Annahme in alle wichtigen Browser sieht. Mit der Zeit entfernt Closure Compiler der Tag es die Ära der nützlich ist sowieso vorbei. Ich bin sicher, werden sie den Compiler aktualisieren lange den Tag zu ermöglichen, zu bewahren, bevor diese Funktion tatsächlich von Nutzen sein wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top