web-dev-qa-db-fra.com

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

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

115
flyingzl

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

Tout ce qui se trouve actuellement dans _Stage-0_ est Strawman, et non ES6. Il est à l’avenir javascript et absolument pas sûr qu’il deviendra un jour une spécification officielle ECMAScript.

Veuillez ne pas simplement régler sur _stage-0_ afin que cela fonctionne sans comprendre les conséquences que cela aura.

Le préréglage Babel contenant uniquement les fonctionnalités de l’ES6 est preset-es2015

91
CodingIntrigue

Les étapes représentent les étapes définies par le processus TC39 qui fonctionne à partir d’idées loufoques mais utiles en normes acceptées, telles que ES6. Le processus prend du temps, car chaque cas doit être discuté, réfléchi, testé, rempli de fonctions, discuté davantage, etc. C'est-à-dire qu'il s'agit d'un organisme de normalisation. Le but est que dire "ES6" aura un sens complet et complet, un peu comme si on disait "ES5".

Dans la pratique, les exigences de votre projet peuvent aller du simple fait d’être éprouvé à la manipulation de fonctionnalités langagières si pratiques, si nébuleuses. Vous voulez probablement commencer avec ces liens:

  • Vue d'ensemble du processus TC39 : Ceci inclut un tableau astucieux indiquant la signification des étapes et la progression des fonctionnalités d'une étape à l'autre. Vous trouverez ci-dessous un aperçu du TC39.

  • Les propositions actives : Un aperçu rapide de l'état d'avancement de certaines propositions. Il comprend également des liens vers les propositions Terminé, Inactif et Étape 0. Aujourd'hui, en avril 2017, Public Class Fields est à l'étape 2, ce qui signifie qu'il est décrit avec précision et que les réviseurs ont été affectés, mais qu'ils ne sont pas entièrement examinés.

  • Le paquet prédéfini Babel pour Stage : la page du plug-in, avec des liens vers Git et NPM, pour toutes les propositions de Stage 3. Fondamentalement, ce plug-in fait partie de la collection de paquetages qui, en théorie, comblent les propositions actuelles de l'étape 3 du TC39. En pratique, des bogues peuvent survenir. De même, vous pouvez trouver le même similaire. Il contient des liens vers les pages de plug-ins pour Stage 2 et les versions antérieures. Ces pages renverront vers des packages contenant à la fois des propositions de phase 3 et des propositions moins stables.

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

En résumé, vous ne devez utiliser ces fonctionnalités que si vous les utilisez. Si vous avez besoin de les utiliser, choisissez le plus grand nombre d’étages qui correspond à vos besoins. Si vous voulez juste une installation de jouets avec des fonctionnalités folles à discuter autour de la fontaine à eau, allez-y et saisissez l'étape 0.

15
Charles Merriam

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

Un extrait du lien:

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

Image globale :

  1. Avec le temps, Javascript évolue et de plus en plus de fonctionnalités sont ajoutées à la langue.
  2. Les navigateurs doivent également faire beaucoup de travail pour pouvoir implémenter ces nouvelles fonctionnalités afin d’être compris par eux. Ce processus est en général beaucoup plus lent que le rythme que Javascript évolue.
  3. Mais les développeurs souhaitent utiliser les nouvelles fonctionnalités du langage, car cela leur facilite l'écriture, la compréhension et la maintenance du code.
  4. Ainsi, les développeurs écrivent leur code en utilisant les nouvelles fonctionnalités de Javascript, mais avant que ce code atteigne les navigateurs, il passe par un processus de construction où, en utilisant une certaine magie, tout le code avec les nouvelles fonctionnalités est transpilé en code compréhensible par navigateur. c'est-à-dire de nouvelles fonctionnalités de Javascript mais codées à l'aide des 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'eux étant Babel.
  6. La façon dont fonctionne Babel est qu'il faut un ensemble de plugins. Chacun de ces plug-in pourrait faire référence à la transformation d'une nouvelle fonctionnalité particulière de Javscript en structures 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 si cela ne finit jamais par aller aux spécifications Javascript définitives, aucun navigateur ne mettra en œuvre cette fonctionnalité. Donc, si un développeur utilise une fonctionnalité expérimentale de JS en utilisant babel plugin, 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 son déploiement sur les navigateurs.
  8. Ce risque est classé en différents niveaux afin d'indiquer les chances qu'une fonctionnalité atteigne la spécification finale.
  9. Babel a également regroupé ces plugins dans différents ensembles, ce qui s'appelle un preset en termes de babel. Et chaque preset contient des plugins de différents niveaux de risque.
  10. preset-0 Cela signifie qu'il a des plugins pour les fonctionnalités qui sont très expérimentales et qui risquent donc beaucoup de passer à la spécification finale. C'est comme une idée qui est venue chez un développeur que Javascript devrait avoir une fonctionnalité particulière, et il a travaillé pour le faire passer au processus de proposition du TC-39.
  11. preset-1 Il contient les plug-ins des idées de fonctionnalités acceptées par le TC-39, et le travail en vaut la peine.
  12. preset-2 Plug-ins pour les fonctionnalités pour lesquelles un brouillon initial est prêt. Et ça continue ..

Il est donc possible qu'une fonctionnalité de l'étape 0 atteigne l'étape 2 dans un certain temps et finisse par être dans la prochaine version de Javascript plus tard.

Ainsi, avec chaque version de ces Presets Babel, vous pouvez y trouver différents ensembles de plug-ins. Il se peut également qu’une caractéristique de l’étape 0 subisse quelques modifications et apporte des changements décisifs dans son fonctionnement. Et cela a atteint 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.

4
Gaurav Kumar

La question initiale était "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 curieux que les réponses se concentrent sur la "différence entre la TC39, étape 0, étape 1 .. la terminologie "est votée, tandis que la seule qui est pertinente (bien que non précise) soit votée à la baisse. Pour citer le site babel:

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

Les préréglages officiels de la phase Babel ont suivi le processus de préparation du TC39 pour les nouvelles propositions de syntaxe en JavaScript.

Chaque préréglage (ex. Stage-3, stage-2, etc.) incluait tous les plug-ins de cet étage et ceux du dessus. Par exemple, l'étape 2 incluait l'étape 3, etc.

L'idée principale est "ceux qui le précèdent". Je ne réponds pas à la seconde moitié car les réponses ci-dessus sont très bonnes sur ce point.

3
Pu Guan