Quelle est la différence entre babel-preset-stage-0, babel-preset-stage-1 etc.?

126

Ma question est: Quelle est la différence entre babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2et babel-preset-stage-3, et quel est le meilleur choix quand nous développons avec ES6?

flyingzl
la source

Réponses:

97

Les préréglages d'étape de Babel correspondent au processus TC39 et aux différents états de chaque proposition pour un changement potentiel de langue. Ils incluent des implémentations et des polyfills pour toutes les modifications proposées à cette étape.

Tout ce qui Stage-0est actuellement est Strawman, pas ES6. Il s'agit du futur Javascript et il n'est absolument pas certain qu'il devienne un jour une spécification ECMAScript officielle.

S'il vous plaît, ne vous contentez pas de régler cela pourstage-0 que cela fonctionne sans comprendre les conséquences que cela aura.

Le préréglage Babel qui ne contient que les fonctionnalités ES6 est preset-es2015

CodageIntrigue
la source
3
Et quoi stage-1? Est-il sûr à utiliser? Certaines stage-1fonctionnalités peuvent-elles être obsolètes et les API peuvent-elles être modifiées à l'avenir?
notgiorgi
4
@notgiorgi Plus sûr que stage-0mais en aucun cas entièrement à l'abri du changement ou même de la dépréciation totale (voir la proposition du constructeur d'appel qui a été retirée après l'étape 1). Mais on pourrait dire la même chose de n'importe quelle étape autre que l'étape 4 (c'est-à-dire terminée).
CodingIntrigue
Vous voudrez peut-être remplacer preset-es2015par babel-preset-node6ces jours, si vous exécutez Node 6 ou supérieur.
Dave Sag
5
Ou mieux encore, babel-preset-envqui peut cibler n'importe quel environnement!
CodingIntrigue
5
Guyz Veuillez utiliser babel-preset-envAU LIEU DE babel-preset-es2015. babel-preset-es2015est presque obsolète
vijay
53

Comme expliqué principalement par d'autres réponses. Le stade 4 est le plus stable et le stade 0, le plus dangereux. Voici un peu de ventilation à un niveau élevé pour les 5 étapes des réponses précédentes et de la documentation. J'ajoute ceci parce que quand j'en suis venu à cela, je m'attendais à une ventilation de plus haut niveau de ce qu'est chaque étape:


Étape 4: Terminé

Prêt à être inclus dans ECMAScript Standard, a passé les tests et fera partie de la prochaine révision


Étape 3: Candidat

Comprend un texte de spécification complet et inclut des plugins qui ont pour la plupart été testés et fournis avec des commentaires. La solution est terminée et tous les autres changements sont basés sur l'expérience de mise en œuvre.


Étape 2: Projet

Support supplémentaire pour les plugins complété autant que possible. Les exigences pour ces derniers sont satisfaites principalement avec seulement des changements incrémentiels en cours de route. La sémantique et l'API devraient être complètes. Cela fera probablement partie de la spécification.


Étape 1: Proposition Un concept qui a été découvert et sélectionné pour être examiné à cette phase, principalement des poly-remplissages et des démos.


Étape 0: Strawman Ce nom m'a fait rire selon le TC-39, il n'a en quelque sorte pas de limite, mais étant donné le contexte, c'est la catégorie des concepts qui n'ont pas été sélectionnés pour être suivis ou examinés.

Chaque niveau est inclusif alors que 4 comprend 3 comprend 2 et ainsi de suite ... J'espère que cette somme aidera quelqu'un à l'avenir.

Appeler au
la source
15

Les étapes représentent les étapes définies par le processus TC39 qui transforme des fonctionnalités d'idées folles mais utiles en normes acceptées, telles que ES6. Le processus prend un certain temps, car chaque cas de coin doit être discuté, pensé, testé, polyfilled, discuté un peu plus, etc. C'est-à-dire qu'il s'agit d'un organisme de normalisation. Le but est que dire «ES6» ait une signification pleine et entière, tout comme le dit «ES5».

Dans la pratique, les exigences de votre projet peuvent aller de rester à l'épreuve et de jouer avec des fonctionnalités linguistiques si pratiques, bien que nébuleuses. Vous voudrez probablement commencer par ces liens:

  • Vue d'ensemble du processus TC39 : Cela comprend un graphique astucieux indiquant ce que signifient les étapes et comment les fonctionnalités progressent d'étape en étape. Ci-dessous, un aperçu de TC39.

  • Les propositions actives : un aperçu rapide de l'étape de certaines propositions. Il comprend également des liens vers les propositions finies, inactives et de l'étape 0. Aujourd'hui, avril 2017, les champs de classe publique sont à l'étape 2, ce qui signifie qu'ils sont décrits avec précision et que des examinateurs ont été affectés, mais qu'ils ne sont pas entièrement examinés.

  • Le paquet Babel Preset pour l'étape 3 : La page du plug-in, avec des liens vers Git et NPM, pour toutes les propositions de l'étape 3. Fondamentalement, ce plug-in extrait la collection de paquets qui, en théorie, remplissent les propositions actuelles de TC39 étape 3. En pratique, des bogues peuvent survenir. De même, vous pouvez trouver des liens similaires vers les pages de plug-in pour l' étape 2 et ci-dessous. Ces pages proposeront des liens vers des packages comprenant à la fois des propositions de l'étape 3 et des propositions moins stables.

  • Babel Preset 'env' : Ce préréglage Babel prend en charge les propositions terminées, en sélectionnant les packages appropriés nécessaires pour prendre en charge ces fonctionnalités dans un environnement connu. Par exemple, un nodeexécutable local nécessite moins de plugins qu'un navigateur plus ancien. On peut penser au plugin 'stage-4' qui prend en charge les futures fonctionnalités approuvées.

En résumé, vous n'avez besoin de gérer ces fonctionnalités préliminaires que si vous les utilisez. Si vous avez besoin de les utiliser, choisissez le plus grand nombre d'étages dont vous avez besoin. Si vous voulez juste une installation de jouet avec des fonctionnalités folles pour discuter de la fontaine à eau, allez-y et saisissez l'étape 0.

Charles Merriam
la source
merci, donc babel-env est une sorte de configuration recommandée par babel
Webwoman
4

C'est le meilleur point de départ pour comprendre. Que sont les préréglages Babel

Un extrait du lien:

Étape 0 - Strawman: juste une idée, possible plugin Babel.
Étape 1 - Proposition: cela vaut la peine de travailler.
Étape 2 - Projet: spécification initiale.
Étape 3 - Candidat: spécifications complètes et implémentations initiales du navigateur.
Étape 4 - Terminé: sera ajouté à la prochaine version annuelle

Image d'ensemble :

  1. Avec le temps, Javascript évolue et de plus en plus de fonctionnalités sont ajoutées au langage.
  2. Les navigateurs doivent également faire beaucoup de travail pour pouvoir implémenter ces nouvelles fonctionnalités pour être compris par eux. Ce processus en général est beaucoup plus lent que le rythme d'évolution de Javascript.
  3. Mais les développeurs veulent utiliser les nouvelles fonctionnalités du langage car cela leur facilite l'écriture, la compréhension et la maintenance du code.
  4. Les développeurs écrivent donc leur code en utilisant les nouvelles fonctionnalités Javascript, mais avant que ce code n'atteigne les navigateurs, il passe par un processus de construction où, en utilisant un peu de magie, tout le code avec de nouvelles fonctionnalités est transpilé en code compréhensible par le navigateur. c'est-à-dire de nouvelles fonctionnalités de Javascript mais codées en utilisant les constructions de langage compréhensibles par le navigateur.
  5. La magie de construction peut être réalisée à l'aide d'outils, l'un d'entre eux étant Babel.
  6. La façon dont Babel fonctionne est qu'il prend un ensemble de plugins. Chacun de ces plugins pourrait faire référence à la transformation d'une nouvelle fonctionnalité particulière de Javscript en constructions de langage compréhensibles par le navigateur.
  7. Il existe des centaines de tels plugins, chacun faisant référence à différentes nouvelles fonctionnalités de Javascript. Ces fonctionnalités peuvent ou non faire partie de la spécification Javascript finale. Et s'il ne finit jamais par aller aux spécifications Javascript finales, aucun des navigateurs n'implémentera cette fonctionnalité. Donc, si un développeur utilise une fonctionnalité expérimentale de JS en utilisant le plugin babel, c'est le risque qu'il / elle prend. S'il ne se termine jamais dans les spécifications, cette partie du code devra toujours être transpilée avant d'être déployée sur les navigateurs.
  8. Ce risque est classé en différents niveaux pour indiquer les chances que toute fonctionnalité atteigne la spécification finale.
  9. Babel a également regroupé ces plugins en différents ensembles, appelés preset en termes de babel. Et chaque préréglage contient des plugins de différents niveaux de risque.
  10. preset-0Cela signifie qu'il a des plugins pour des fonctionnalités qui sont très expérimentales et donc à haut risque d'atteindre les spécifications finales. C'est comme une idée qui est venue à un développeur que Javascript devrait avoir une fonctionnalité particulière, et il a fait du travail pour le faire passer au processus de proposition TC-39.
  11. preset-1 Il contient les plugins pour les idées de fonctionnalités acceptées par le TC-39, et ils trouvent que cela vaut la peine de travailler.
  12. preset-2Plugins pour les fonctionnalités où un projet initial est prêt pour la fonctionnalité. Et ça continue ...

Il se peut donc qu'une fonctionnalité de l'étape 0 atteigne l'étape 2 dans un certain temps et se retrouve dans la prochaine version de Javascript un peu plus tard.

Par conséquent, avec chaque version de ces préréglages Babel, vous pouvez y trouver différents ensembles de plugins. Il peut également arriver qu'une fonctionnalité de l'étape 0 subisse des modifications et apporte des modifications radicales à son fonctionnement. Et il a atteint, disons l'étape 2 avec une API totalement différente. Les développeurs doivent donc s'assurer que lorsqu'ils mettent à jour ces plugins, ils apportent les modifications nécessaires à leur code.

Gaurav Kumar
la source
3

La question originale est "Quelle est la différence entre babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2 et babel-preset-stage-3", il est étrange que les réponses se concentrent sur "la différence entre TC39 stage-0, stage-1 .. terminologie "obtenir voté, tandis que le seul pertinent (mais pas précis) est voté à la baisse. Pour citer le site babel:

Un préréglage Babel est une liste de plugins partageables.

Les préréglages officiels de Babel Stage ont suivi le processus de mise en scène du TC39 pour les nouvelles propositions de syntaxe en JavaScript.

Chaque préréglage (ex. Stage-3, stage-2, etc.) comprenait tous les plugins pour cette étape particulière et ceux au-dessus. Par exemple, l'étape 2 incluait l'étape 3, et ainsi de suite.

L'idée centrale est «ceux au-dessus». Je ne réponds pas à la seconde moitié car les réponses ci-dessus sont très bonnes sur cette partie.

Pu Guan
la source
-20

Je l'ai. Vous pouvez vous référer à https://babeljs.io/docs/plugins/preset-stage-0/

En un mot, preset-stage-0contient toutes les fonctionnalités qui preset-stage-1ont, et preset-stage-1contient toutes les fonctionnalités qui preset-stage-2ont et ainsi de suite ...

Le chiffre inférieur est plus puissant. Dans votre projet, si vous ne vous souciez pas des problèmes, définissez simplement stage-0...

flyingzl
la source
15
Mais comprenez-vous ce qu'est stage-0réellement, etc. Puisque vous dites "Le chiffre inférieur est plus puissant.", Je ne crois pas.
Felix Kling
2
En fait, j'ai confondu le stageavec ES6, @RGraham l'a souligné The Babel Preset which contains only ES6 features is preset-es2015. Merci!
flyingzl
Si vous voulez avoir des problèmes plus tard, utilisez simplement stage-0! Certaines ou toutes les fonctionnalités de stage-0 peuvent ne pas entrer du tout dans la spécification ES. Alors méfiez-vous des fonctionnalités de stage-0.
devsnd
Je ne sais pas pourquoi cette réponse est si mal votée. Ce qu'il dit est correct. TC39 stage-0 sont essentiellement des propositions qui ne sont pas fiables. Ils peuvent ou non faire la proposition finale. Mais babel-preset-stage-0comprend tous les plugins, allant de stage-0à stage-3. Cela signifie que je veux toutes les fonctionnalités proposées, peu importe si elles peuvent être proposées ou non.
Gaurav Kumar