Was ist der Unterschied zwischen Babel-Preset-Stufe-0, Babel-Preset-Stufe-1 usw.?

126

Meine Frage ist: Was ist der Unterschied zwischen babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2und babel-preset-stage-3, und was ist die beste Wahl , wenn wir mit der Entwicklung ES6?

Flyingzl
quelle

Antworten:

97

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-0befindet, 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

CodingIntrigue
quelle
3
Was ist mit stage-1? Ist es sicher zu bedienen? Können einige stage-1Funktionen in Zukunft veraltet und APIs geändert werden?
notgiorgi
4
@notgiorgi Sicherer als, stage-0aber 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).
CodingIntrigue
Sie könnten ersetzt werden sollen preset-es2015mit babel-preset-node6diesen Tagen, wenn Knoten 6 oder besser ausgeführt werden .
Dave Sag
5
Oder noch besser, babel-preset-envdas kann auf jede Umgebung abzielen!
CodingIntrigue
5
Guyz Bitte benutzen Sie babel-preset-envSTATT babel-preset-es2015. babel-preset-es2015ist fast veraltet
Vijay
53

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:


Stufe 4: Fertig

Bereit zur Aufnahme in den ECMAScript-Standard, hat die Tests bestanden und wird Teil der nächsten Überarbeitung sein


Stufe 3: Kandidat

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.


Stufe 2: Entwurf

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.


Stufe 1: Vorschlag Ein Konzept, das entdeckt und ausgewählt wurde, um in dieser Phase untersucht zu werden, wird hauptsächlich von Poly-Fills und Demos erwartet.


Stufe 0: Strawman Dieser Name brachte mich laut TC-39 zum Lachen. Er hat keinerlei Grenzen, aber angesichts des Kontexts ist er die Kategorie für Konzepte, die nicht ausgewählt wurden, um weiterverfolgt oder untersucht zu 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.

Ruf an bei
quelle
15

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 nodebenö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.

Charles Merriam
quelle
danke, also ist babel-env eine art von babel
empfohlene
4

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 :

  1. Mit der Zeit entwickelt sich Javascript weiter und der Sprache werden immer mehr Funktionen hinzugefügt.
  2. Die Browser müssen auch viel Arbeit leisten, damit sie diese neuen Funktionen implementieren können, damit sie sie verstehen. Dieser Prozess ist im Allgemeinen viel langsamer als das Tempo, mit dem sich Javascript entwickelt.
  3. Entwickler möchten jedoch die neuen Sprachfunktionen nutzen, da sie das Schreiben, Verstehen und Verwalten des Codes erleichtern.
  4. Entwickler schreiben ihren Code mit den neuen Javascript-Funktionen, aber bevor dieser Code die Browser erreicht, durchläuft er einen Erstellungsprozess, bei dem mit etwas Magie der gesamte Code mit den neuen Funktionen in Code umgewandelt wird, der für den Browser verständlich ist. dh neue Funktionen von Javascript, aber mit dem Browser verständliche Sprachkonstrukte codiert.
  5. Die Build-Magie kann mit Werkzeugen ausgeführt werden, darunter Babel.
  6. Babel arbeitet so, dass es eine Reihe von Plugins benötigt. Jedes dieser Plugins könnte sich auf die Umwandlung einer bestimmten neuen Funktion von Javscript in browserverständliche Sprachkonstrukte beziehen.
  7. Es gibt Hunderte solcher Plugins, die sich jeweils auf verschiedene neue Funktionen von Javascript beziehen. Diese Funktionen können Teil der endgültigen Javascript-Spezifikation sein oder nicht. Und wenn es nie zur endgültigen Javascript-Spezifikation kommt, wird keiner der Browser diese Funktion implementieren. Wenn also ein Entwickler eine experimentelle Funktion von JS unter Verwendung des Babel-Plugins verwendet, besteht das Risiko, dass er / sie das Risiko eingeht. Wenn es nie in der Spezifikation landet, muss dieser Teil des Codes immer transpiliert werden, bevor er für Browser bereitgestellt wird.
  8. Dieses Risiko wird in verschiedene Ebenen eingeteilt, um die Wahrscheinlichkeit anzuzeigen, dass ein Merkmal die endgültige Spezifikation erreicht.
  9. Auch babel hat diese Plugins in verschiedene Sets gruppiert, was presetin babel ausgedrückt als a bezeichnet wird. Und jedes Preset enthält Plugins aus verschiedenen Risikostufen.
  10. preset-0Dies 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.
  11. preset-1 Es enthält die Plugins für die vom TC-39 akzeptierten Funktionsideen, und es lohnt sich, daran zu arbeiten.
  12. preset-2Plugins 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.

Gaurav Kumar
quelle
3

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.

Pu Guan
quelle
-20

Ich hab's. Ihr könnt auf https://babeljs.io/docs/plugins/preset-stage-0/ verweisen.

Kurz gesagt, preset-stage-0enthält alle Funktionen, preset-stage-1die vorhanden sind, und preset-stage-1enthält alle Funktionen, preset-stage-2die 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...

Flyingzl
quelle
15
Aber verstehst du was stage-0usw. eigentlich ist? Da Sie sagen "Niedrigere Ziffer ist stärker.", Glaube ich nicht.
Felix Kling
2
Eigentlich habe ich das stagemit verwechselt ES6, @RGraham hat darauf hingewiesen The Babel Preset which contains only ES6 features is preset-es2015. Vielen Dank!
Flyingzl
Wenn Sie später Probleme haben möchten, verwenden Sie einfach Stufe 0! Einige oder alle Funktionen der Stufe 0 schaffen es möglicherweise überhaupt nicht in die ES-Spezifikation. Achten Sie daher auf die Verwendung von Stage-0-Funktionen.
devsnd
Ich bin mir nicht sicher, warum diese Antwort so schlecht gewählt wurde. Was er sagt, ist richtig. TC39 Stufe 0 sind im Grunde genommen Vorschläge, die sehr wenig vertrauenswürdig sind. Sie können es bis zum endgültigen Vorschlag schaffen oder nicht. Aber babel-preset-stage-0umfasst alle Plugins, die von stage-0zu stage-3. Es bedeutet, dass ich alle vorgeschlagenen Funktionen haben möchte, egal ob sie es zum Vorschlag schaffen oder nicht.
Gaurav Kumar