¿Cuál es la diferencia entre babel-preset-stage-0, babel-preset-stage-1, etc.?

126

Mi pregunta es: ¿Cuál es la diferencia entre babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2y babel-preset-stage-3, y cuál es la mejor opción cuando desarrollamos con ES6?

flyingzl
fuente

Respuestas:

97

Los preajustes de etapa de Babel equivalen al Proceso TC39 y los diferentes estados de cada propuesta para un posible cambio de idioma. Incluyen implementaciones y polyfills para todos los cambios propuestos en esa etapa.

Todo lo que hay actualmente Stage-0es Strawman, no ES6. Es un Javascript futuro y no está absolutamente seguro de que alguna vez se convierta en una especificación oficial de ECMAScript.

No se limite a configurarlo parastage-0 que funcione sin comprender las consecuencias que esto tendrá.

El preajuste de Babel que contiene solo características de ES6 es preset-es2015

CodificaciónIntriga
fuente
3
¿Qué hay de stage-1? ¿Es seguro de usar? ¿Se stage-1pueden dejar de usar algunas funciones y cambiar las API en el futuro?
notgiorgi
44
@notgiorgi más seguro que stage-0pero de ninguna manera totalmente a salvo de cambio o incluso desaprobación total (véase propuesta constructor de llamadas que se retiró después de la etapa 1). Pero lo mismo podría decirse de cualquier Etapa que no sea la Etapa 4 (es decir, Finalizada).
CodingIntrigue
Es posible que desee reemplazar preset-es2015con babel-preset-node6estos días, si ejecuta Nodo 6 o mejor.
Dave Sag
55
O mejor aún, ¡ babel-preset-envque puede apuntar a cualquier entorno!
CodingIntrigue
55
Guyz Utilice babel-preset-envVEZ DE babel-preset-es2015. babel-preset-es2015está casi desactualizado
vijay
53

Como mayormente elaborado por otras respuestas. La etapa 4 es más estable y la etapa 0, la más peligrosa. Aquí hay un pequeño desglose a un alto nivel para las 5 etapas de las respuestas anteriores y la documentación. Estoy agregando esto porque cuando llegué a esto esperaba un desglose más de alto nivel de lo que es cada etapa:


Etapa 4: Terminado

Listo para su inclusión en ECMAScript Standard, ha pasado las pruebas y formará parte de la próxima revisión


Etapa 3: candidato

Incluye un texto completo de especificaciones e incluye complementos que han sido probados y provistos de comentarios. La solución está completa y todos los cambios posteriores se basan en la experiencia de implementación.


Etapa 2: borrador

Soporte adicional para complementos completados tanto como sea posible. Los requisitos para estos se cumplen principalmente con solo cambios incrementales en el camino. Se espera que la semántica y la API estén completas. Lo más probable es que se convierta en parte de la especificación.


Etapa 1: Propuesta Se espera un concepto que se ha descubierto y seleccionado para ser examinado en esta fase, en su mayoría de polietileno y demos.


Etapa 0: Strawman Este nombre me hizo reír de acuerdo con el TC-39, no tiene ningún tipo de límite, pero dado el contexto, es la categoría de conceptos que no han sido seleccionados para ser seguidos o examinados.

Cada nivel es inclusivo, mientras que 4 incluye 3 incluye 2 y así sucesivamente ... Espero que este resumen ayude a alguien en el futuro.

Llama a
fuente
15

Las etapas representan las etapas definidas por el proceso TC39 que trabaja características de ideas locas pero útiles en estándares aceptados, como ES6. El proceso lleva algo de tiempo, ya que cada caso de esquina debe ser discutido, pensado, probado, polinizado, discutido un poco más, etc. Es decir, es un cuerpo de estándares. El objetivo es que decir "ES6" tendrá un significado completo y completo, al igual que decir "ES5".

En la práctica, los requisitos de su proyecto pueden variar desde mantenerse a lo probado y verdadero hasta jugar con características de lenguaje tan prácticas, aunque nebulosas. Probablemente quiera comenzar con estos enlaces:

  • Descripción general del proceso TC39 : esto incluye un ingenioso cuadro sobre el significado de las etapas y cómo las características progresan de una etapa a otra. Debajo de eso hay una descripción general de TC39.

  • Las propuestas activas : una descripción general rápida de en qué etapa se encuentran ciertas propuestas. También incluye enlaces a las propuestas finalizadas, inactivas y de etapa 0. Hoy, abril de 2017, Public Class Fields se encuentra en la etapa 2, lo que significa que se describe con precisión y los revisores han sido asignados, pero no se revisan por completo.

  • El paquete preestablecido de Babel para la etapa 3 : la página de complementos, con enlaces a Git y NPM, para todas las propuestas de la etapa 3. Básicamente, este complemento atrae a la colección de paquetes que, en teoría, llenan las propuestas actuales en TC39 etapa 3. En la práctica, pueden ocurrir errores. Además, puede encontrar el similar De manera similar, se vincula a las páginas de complementos para la Etapa 2 y siguientes. Esas páginas enlazarán a paquetes que incluyen propuestas de la Etapa 3 y propuestas menos estables.

  • Babel Preset 'env' : este preajuste de Babel admite propuestas completadas, seleccionando los paquetes correctos necesarios para admitir estas características en un entorno conocido. Por ejemplo, un nodeejecutable local requiere menos complementos que un navegador anterior. Se puede pensar en el complemento 'stage-4' que admite funciones futuras aprobadas.

En resumen, solo necesita lidiar con estas funciones de prelanzamiento si las usa. Si necesita usarlos, elija el mayor número de etapas que tenga lo que necesita. Si solo desea una instalación de juguetes con características locas para discutir alrededor del enfriador de agua, continúe y tome la etapa 0.

Charles Merriam
fuente
gracias, así que babel-env es una especie de configuración recomendada por babel
Webwoman
4

Este es el mejor punto de partida para entender. ¿Qué son los presets de babel?

Un extracto del enlace:

Etapa 0 - Strawman: solo una idea, posible complemento de Babel.
Etapa 1 - Propuesta: vale la pena trabajar en esto.
Etapa 2 - Borrador: especificación inicial.
Etapa 3 - Candidato: especificaciones completas e implementaciones iniciales del navegador.
Etapa 4 - Terminado: se agregará a la próxima versión anual

Cuadro general :

  1. Con el tiempo, Javascript está evolucionando y cada vez se agregan más funciones al lenguaje.
  2. Los navegadores también tienen que hacer mucho trabajo para poder implementar estas nuevas funciones para que sean entendidas por ellos. Este proceso en general es mucho más lento que el ritmo en que evoluciona Javascript.
  3. Pero los desarrolladores quieren usar las nuevas características del lenguaje, ya que les facilita la escritura, la comprensión y el mantenimiento del código.
  4. Por lo tanto, los desarrolladores escriben su código usando las nuevas funciones de Javascript, pero antes de que ese código llegue a los navegadores, pasa por un proceso de compilación en el que al usar un poco de magia, todo el código con nuevas funciones se transpira en un código comprensible para el navegador. es decir, nuevas características de Javascript pero codificadas usando las construcciones de lenguaje comprensibles del navegador.
  5. La magia de construcción se puede realizar utilizando herramientas, una de ellas es Babel.
  6. La forma en que funciona Babel es que requiere un conjunto de complementos. Cada uno de estos complementos podría referirse a la transformación de una nueva característica particular de Javscript en construcciones de lenguaje comprensibles para el navegador.
  7. Hay cientos de estos complementos, cada uno de los cuales se refiere a diferentes características nuevas de Javascript. Estas características pueden o no ser parte de la especificación final de Javascript. Y si nunca termina yendo a la especificación final de Javascript, ninguno de los navegadores implementará esta característica. Entonces, si algún desarrollador usa alguna característica experimental de JS usando el complemento babel, es el riesgo que él / ella está tomando. Si nunca termina en la especificación, esa parte del código siempre tendrá que ser recopilada antes de implementarse en los navegadores.
  8. Este riesgo se clasifica en varios niveles para indicar las posibilidades de que cualquier característica alcance la especificación final.
  9. También babel ha agrupado estos complementos en varios conjuntos, lo que se denomina preseten términos de babel. Y cada preset contiene complementos de varios niveles de riesgo.
  10. preset-0Significa que tiene complementos para características que son muy experimentales y, por lo tanto, tienen un alto riesgo de llegar a la especificación final. Es como una idea que llegó a un desarrollador que Javascript debería tener una característica particular, e hizo un trabajo para llevarlo al proceso de propuesta TC-39.
  11. preset-1 Contiene los complementos para las ideas de características aceptadas por el TC-39, y consideran que vale la pena trabajar en ellas.
  12. preset-2Complementos para características donde un borrador inicial está listo para la característica. Y sigue ...

Por lo tanto, podría suceder que una característica en la Etapa 0 llegue a la Etapa 2 en algún momento y termine en la próxima versión de Javascript un poco más tarde.

Por lo tanto, con cada versión de estos Presets de Babel, puede encontrar diferentes conjuntos de complementos en él. También podría suceder que una característica en la etapa 0 experimentó algunos cambios e hizo cambios importantes en su funcionamiento. Y llegó, digamos, etapa 2 con una API totalmente diferente. Por lo tanto, los desarrolladores deben asegurarse de que cuando actualicen estos complementos hagan los cambios necesarios en su código.

Gaurav Kumar
fuente
3

La pregunta original es "¿Cuál es la diferencia entre babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2 y babel-preset-stage-3", es extraño que las respuestas se centren en "diferencia entre TC39 etapa-0, etapa-1 .. terminología "se vota, mientras que el único relevante (aunque no exacto) se rechaza. Para citar del sitio de babel:

Un preset de Babel es una lista de complementos que se puede compartir.

Los preajustes oficiales de Babel Stage rastrearon el proceso de puesta en escena TC39 para nuevas propuestas de sintaxis en JavaScript.

Cada preajuste (ej. Etapa-3, etapa-2, etc.) incluía todos los complementos para esa etapa en particular y los que están por encima de ella. Por ejemplo, la etapa 2 incluía la etapa 3, y así sucesivamente.

La idea central es 'los que están por encima'. No estoy respondiendo la segunda mitad ya que las respuestas anteriores son muy buenas en esa parte.

Pu Guan
fuente
-20

Lo tengo. Ustedes pueden referirse https://babeljs.io/docs/plugins/preset-stage-0/

En una palabra corta, preset-stage-0contiene toda la funcionalidad que preset-stage-1tiene, y preset-stage-1contiene toda la funcionalidad que preset-stage-2tiene y así sucesivamente ...

El dígito inferior es más poderoso. En su proyecto, si no quiere molestarse con problemas, simplemente configure stage-0...

flyingzl
fuente
15
Pero, ¿entiendes qué es stage-0, etc.? Como usted dice "El dígito inferior es más poderoso", creo que no.
Felix Kling
2
En realidad, confundí stagecon ES6, @RGraham lo he señalado The Babel Preset which contains only ES6 features is preset-es2015. ¡Gracias!
flyingzl
Si quieres tener problemas más adelante, ¡solo usa stage-0! Algunas o todas las características de etapa 0 podrían no estar incluidas en la especificación ES. Así que tenga cuidado con el uso de las características de etapa 0.
devsnd
No estoy seguro de por qué esta respuesta es tan rechazada. Lo que está diciendo es correcto. TC39 stage-0 son básicamente propuestas que son muy poco confiables. Pueden o no llegar a la propuesta final. Pero babel-preset-stage-0incluye todos los complementos, que van desde stage-0hasta stage-3. Significa que quiero todas las características propuestas, sin importar si pueden hacerlo o no.
Gaurav Kumar el