Ma question est: 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 quand nous développons avec ES6
?
la source
Ma question est: 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 quand nous développons avec ES6
?
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-0
est 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
stage-1
? Est-il sûr à utiliser? Certainesstage-1
fonctionnalités peuvent-elles être obsolètes et les API peuvent-elles être modifiées à l'avenir?stage-0
mais 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).preset-es2015
parbabel-preset-node6
ces jours, si vous exécutez Node 6 ou supérieur.babel-preset-env
qui peut cibler n'importe quel environnement!babel-preset-env
AU LIEU DEbabel-preset-es2015
.babel-preset-es2015
est presque obsolèteComme 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.
la source
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
node
exé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.
la source
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 :
preset
en termes de babel. Et chaque préréglage contient des plugins de différents niveaux de risque.preset-0
Cela 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.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.preset-2
Plugins 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.
la source
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:
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.
la source
Je l'ai. Vous pouvez vous référer à https://babeljs.io/docs/plugins/preset-stage-0/
En un mot,
preset-stage-0
contient toutes les fonctionnalités quipreset-stage-1
ont, etpreset-stage-1
contient toutes les fonctionnalités quipreset-stage-2
ont 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
...la source
stage-0
réellement, etc. Puisque vous dites "Le chiffre inférieur est plus puissant.", Je ne crois pas.stage
avecES6
, @RGraham l'a soulignéThe Babel Preset which contains only ES6 features is preset-es2015
. Merci!babel-preset-stage-0
comprend tous les plugins, allant destage-0
àstage-3
. Cela signifie que je veux toutes les fonctionnalités proposées, peu importe si elles peuvent être proposées ou non.