Antworten:
Babels Bühnenvoreinstellungen entsprechen dem TC39-Prozess und den verschiedenen Zuständen jedes Vorschlags für einen möglichen Sprachwechsel. Sie enthalten Implementierungen und Polyfills für alle vorgeschlagenen Änderungen in dieser Phase.
Alles, was sich derzeit Stage-0
befindet, ist Strawman, nicht ES6. Es ist zukünftiges Javascript und absolut nicht sicher, ob es jemals in eine offizielle ECMAScript-Spezifikation aufgenommen wird.
Bitte stellen Sie nicht nur ein,stage-0
damit es funktioniert, ohne die Konsequenzen zu verstehen, die dies haben wird.
Das Babel-Preset, das nur ES6-Funktionen enthält, ist preset-es2015
stage-0
aber keineswegs völlig sicher vor Änderungen oder sogar völliger Ablehnung (siehe Aufrufkonstruktor-Vorschlag, der nach Stufe 1 zurückgezogen wurde). Das Gleiche gilt jedoch für jede andere Stufe als Stufe 4 (dh abgeschlossen).
preset-es2015
mit babel-preset-node6
diesen Tagen, wenn Knoten 6 oder besser ausgeführt werden .
babel-preset-env
das kann auf jede Umgebung abzielen!
babel-preset-env
STATT babel-preset-es2015
. babel-preset-es2015
ist fast veraltet
Wie meistens durch andere Antworten herausgearbeitet. Stufe 4 ist am stabilsten und Stufe 0 am gefährlichsten. Hier ist eine kleine Aufschlüsselung auf hohem Niveau für die 5 Stufen aus den vorherigen Antworten und der Dokumentation. Ich füge dies hinzu, weil ich, als ich dazu kam, eine allgemeinere Aufschlüsselung der einzelnen Phasen erwartet hatte:
Bereit zur Aufnahme in den ECMAScript-Standard, hat die Tests bestanden und wird Teil der nächsten Überarbeitung sein
Enthält einen vollständigen Spezifikationstext und Plugins, die größtenteils getestet und mit Feedback versehen wurden. Die Lösung ist vollständig und alle weiteren Änderungen basieren auf der Implementierungserfahrung.
Weitere Unterstützung für Plugins wurde so weit wie möglich abgeschlossen. Die Anforderungen hierfür werden meist nur mit inkrementellen Änderungen auf dem Weg erfüllt. Semantik und API werden voraussichtlich vollständig sein. Es wird höchstwahrscheinlich Teil der Spezifikation werden.
Jedes Level ist inklusive, während 4 beinhaltet 3 beinhaltet 2 und so weiter ... Ich hoffe, dass diese Summe jemandem in der Zukunft hilft.
Die Stufen stellen die Stufen dar, wie sie durch den TC39-Prozess definiert wurden, der Funktionen von verrückten, aber nützlichen Ideen in akzeptierte Standards wie ES6 umwandelt. Der Prozess dauert einige Zeit, da jeder Eckfall besprochen, überlegt, getestet, polygefüllt, weiter diskutiert usw. werden muss. Das heißt, es handelt sich um eine Normungsorganisation. Das Ziel ist, dass das Sagen von "ES6" eine vollständige Bedeutung hat, ähnlich wie das Sagen von "ES5".
In der Praxis können Ihre Projektanforderungen vom Bleiben über das Bewährte bis zum Herumspielen mit ach so praktischen, wenn auch nebulösen Sprachfunktionen reichen. Sie möchten wahrscheinlich mit diesen Links beginnen:
Die TC39-Prozessübersicht : Dazu gehört ein übersichtliches Diagramm, was die Stufen bedeuten und wie sich die Funktionen von Stufe zu Stufe entwickeln. Darunter befindet sich eine Übersicht über TC39.
Die aktiven Vorschläge : Ein kurzer Überblick über die Phase, in der sich bestimmte Vorschläge befinden. Sie enthält auch Links zu den Vorschlägen "Fertig", "Inaktiv" und "Phase 0". Heute, im April 2017, befindet sich Public Class Fields in Phase 2, dh es wird genau beschrieben und die Prüfer wurden zugewiesen, aber nicht vollständig geprüft.
Das Babel-Voreinstellungspaket für Stufe 3 : Die Plug-In-Seite mit Links zu Git und NPM für alle Vorschläge für Stufe 3. Grundsätzlich zieht dieses Plug-In die Sammlung von Paketen ein, die theoretisch die aktuellen Vorschläge in TC39 Stufe 3 polyfill füllen. In der Praxis können Fehler auftreten. Ähnliches finden Sie auch. In ähnlicher Weise wird auf die Plug-In-Seiten für Stufe 2 und darunter verwiesen. Diese Seiten enthalten Links zu Paketen, die sowohl Vorschläge der Stufe 3 als auch weniger stabile Vorschläge enthalten.
Babel-Voreinstellung 'env' : Diese Babel-Voreinstellung unterstützt abgeschlossene Vorschläge und wählt die richtigen Pakete aus, die zur Unterstützung dieser Funktionen in einer bekannten Umgebung erforderlich sind. Beispielsweise node
benötigt eine lokale ausführbare Datei weniger Plugins als ein älterer Browser. Man kann sich das 'Stage-4'-Plugin vorstellen, das genehmigte zukünftige Funktionen unterstützt.
Zusammenfassend müssen Sie sich mit diesen Vorabversionsfunktionen nur befassen, wenn Sie sie verwenden. Wenn Sie sie verwenden müssen, wählen Sie die höchste Anzahl von Stufen aus, die das haben, was Sie benötigen. Wenn Sie nur eine Spielzeuginstallation mit verrückten Funktionen rund um den Wasserkühler diskutieren möchten, greifen Sie zu Stufe 0.
Dies ist der beste Ausgangspunkt, um zu verstehen. Was sind Babel Presets?
Ein Auszug aus dem Link:
Stufe 0 - Strawman: Nur eine Idee, mögliches Babel-Plugin.
Stufe 1 - Vorschlag: Es lohnt sich, daran zu arbeiten.
Stufe 2 - Entwurf: erste Spezifikation
Stufe 3 - Kandidat: Vollständige Spezifikation und erste Browser-Implementierungen.
Stufe 4 - Fertig: Wird zur nächsten jährlichen Veröffentlichung hinzugefügt
Gesamtbild :
preset
in babel ausgedrückt als a bezeichnet wird. Und jedes Preset enthält Plugins aus verschiedenen Risikostufen.preset-0
Dies bedeutet, dass es Plugins für Funktionen gibt, die sehr experimentell sind und daher ein hohes Risiko haben, die endgültige Spezifikation zu erreichen. Es ist wie eine Idee, die einem Entwickler einfiel, dass Javascript eine bestimmte Funktion haben sollte, und er hat einige Arbeit geleistet, um es zum TC-39-Vorschlagsprozess zu bringen.preset-1
Es enthält die Plugins für die vom TC-39 akzeptierten Funktionsideen, und es lohnt sich, daran zu arbeiten.preset-2
Plugins für Features, bei denen ein erster Entwurf für das Feature bereitsteht. Und es geht weiter ..Es kann also vorkommen, dass ein Feature in Stufe 0 in einiger Zeit Stufe 2 erreicht und einige Zeit später in der nächsten Version von Javascript erscheint.
Daher können Sie mit jeder Version dieser Babel-Voreinstellungen unterschiedliche Plugins finden. Es kann auch vorkommen, dass ein Feature in Stufe 0 einige Änderungen durchlaufen hat und Änderungen an seiner Funktionsweise vorgenommen hat. Und es erreichte, sagen wir Stufe 2 mit einer völlig anderen API. Entwickler müssen also sicherstellen, dass sie beim Aktualisieren dieser Plugins die erforderlichen Änderungen an ihrem Code vornehmen.
Die ursprüngliche Frage lautet: "Was ist der Unterschied zwischen Babel-Preset-Stufe-0, Babel-Preset-Stufe-1, Babel-Preset-Stufe-2 und Babel-Preset-Stufe-3?" zwischen TC39 Stufe-0, Stufe-1 .. Terminologie "werden abgestimmt, während die einzige relevante (wenn auch nicht genaue) herabgestimmt wird. Um von babel site zu zitieren:
Ein Babel-Preset ist eine gemeinsam nutzbare Liste von Plugins.
Die offiziellen Babel Stage-Voreinstellungen verfolgten den TC39-Staging-Prozess für neue Syntaxvorschläge in JavaScript.
Jedes Preset (z. B. Stufe 3, Stufe 2 usw.) enthielt alle Plugins für diese bestimmte Stufe und die darüber liegenden. Zum Beispiel umfasste Stufe 2 Stufe 3 und so weiter.
Die Kernidee ist "die darüber". Ich beantworte die zweite Hälfte nicht, da die obigen Antworten in diesem Punkt sehr gut sind.
Ich hab's. Ihr könnt auf https://babeljs.io/docs/plugins/preset-stage-0/ verweisen.
Kurz gesagt, preset-stage-0
enthält alle Funktionen, preset-stage-1
die vorhanden sind, und preset-stage-1
enthält alle Funktionen, preset-stage-2
die vorhanden sind, und so weiter ...
Die niedrigere Ziffer ist stärker. Wenn Sie sich in Ihrem Projekt nicht mit Problemen beschäftigen, stellen Sie einfach stage-0
...
stage-0
usw. eigentlich ist? Da Sie sagen "Niedrigere Ziffer ist stärker.", Glaube ich nicht.
stage
mit verwechselt ES6
, @RGraham hat darauf hingewiesen The Babel Preset which contains only ES6 features is preset-es2015
. Vielen Dank!
babel-preset-stage-0
umfasst alle Plugins, die von stage-0
zu stage-3
. Es bedeutet, dass ich alle vorgeschlagenen Funktionen haben möchte, egal ob sie es zum Vorschlag schaffen oder nicht.
stage-1
? Ist es sicher zu bedienen? Können einigestage-1
Funktionen in Zukunft veraltet und APIs geändert werden?