Qual è la differenza tra babel-preset-stage-0, babel-preset-stage-1 ecc?


126

La mia domanda è: Qual è la differenza tra babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2e babel-preset-stage-3, e qual è la scelta migliore quando sviluppiamo con ES6?

Risposte:


97

I preset sul palco di Babel corrispondono al processo TC39 e ai diversi stati di ciascuna proposta per un potenziale cambio di lingua. Includono implementazioni e polyfill per tutte le modifiche proposte in quella fase.

Tutto ciò che è attualmente Stage-0è Strawman, non ES6. È il futuro Javascript e non è assolutamente certo che riuscirà mai a entrare in alcuna specifica ECMAScript ufficiale.

Per favore, non limitarti astage-0 farlo in modo che funzioni senza capire le conseguenze che ciò avrà.

Il Preset Babel che contiene solo le funzionalità ES6 è preset-es2015


3
Che dire stage-1? è sicuro da usare? Alcune stage-1funzioni possono essere deprecate e le API possono essere modificate in futuro?
notgiorgi,

4
@notgiorgi Più sicuro che stage-0mai del tutto al sicuro dal cambiamento o persino dall'ammortamento totale (vedi proposta del costruttore di chiamata che è stata ritirata dopo la Fase 1). Ma lo stesso si può dire di qualsiasi Stage diverso dallo Stage 4 (cioè Finished).
CodingIntrigue

Si potrebbe voler sostituire preset-es2015con babel-preset-node6questi giorni, se in esecuzione Nodo 6 o superiore.
Dave Sag,

5
O meglio ancora, babel-preset-envche può colpire qualsiasi ambiente!
CodingIntrigue

5
Guyz Si prega di utilizzare babel-preset-envINSTEAD OF babel-preset-es2015. babel-preset-es2015è quasi obsoleto
vijay

53

Come per lo più elaborato da altre risposte. La fase 4 è la più stabile e la fase 0, la più pericolosa. Ecco un po 'di una ripartizione ad alto livello per le 5 fasi dalle risposte precedenti e dalla documentazione. Sto aggiungendo questo perché quando sono arrivato a questo mi aspettavo una suddivisione di più alto livello di ciò che ogni fase è:


Fase 4: terminata

Pronto per l'inclusione nello standard ECMAScript, ha superato i test e farà parte della prossima revisione


Fase 3: candidato

Include un testo completo delle specifiche e include plug-in che sono stati per lo più testati e forniti con feedback. La soluzione è completa e tutte le ulteriori modifiche si basano sull'esperienza di implementazione.


Fase 2: Bozza

Ulteriore supporto per i plugin completato il più possibile. I requisiti per questi sono soddisfatti principalmente con solo cambiamenti incrementali sulla strada. Semantica e API dovrebbero essere complete. Molto probabilmente diventerà parte delle specifiche.


Fase 1: proposta È atteso un concetto che è stato scoperto e selezionato per essere esaminato in questa fase principalmente polifillamenti e dimostrazioni.


Stage 0: Strawman Questo nome mi ha fatto ridacchiare secondo il TC-39 di cui non ha alcun tipo di limite ma dato il contesto è la categoria dei concetti che non sono stati selezionati per essere seguiti o esaminati.

Ogni livello è inclusivo mentre 4 include 3 include 2 e così via ... Spero che questa somma aiuti qualcuno in futuro.


15

Le fasi rappresentano le fasi definite dal processo TC39 che trasforma le funzioni da idee folli ma utili in standard accettati, come ES6. Il processo richiede un po 'di tempo, poiché ogni caso d'angolo deve essere discusso, pensato, testato, riempito di poligoni, discusso un po' di più, ecc. Cioè, è un corpo standard. L'obiettivo è che dire "ES6" avrà un significato completo e completo, proprio come dire "ES5".

In pratica, i requisiti del tuo progetto possono variare dal restare fedeli a quelli provati e fedeli al giocare con caratteristiche linguistiche davvero così convenienti, anche se nebulose. Probabilmente vuoi iniziare con questi link:

  • Panoramica del processo TC39 : questo include un elegante grafico su cosa significano le fasi e su come le funzionalità progrediscono da una fase all'altra. Di seguito una panoramica di TC39.

  • Proposte attive : una rapida panoramica della fase in cui si trovano determinate proposte. Include anche collegamenti alle proposte Finite, Inattive e Fase 0. Oggi, aprile 2017, Public Class Fields è nella fase 2, il che significa che è descritta con precisione e che i revisori sono stati assegnati, ma non è stato completamente rivisto.

  • Il pacchetto predefinito Babel per Stage 3 : la pagina dei plug-in, con collegamenti a Git e NPM, per tutte le proposte Stage 3. Fondamentalmente, questo plug-in inserisce la raccolta di pacchetti che, in teoria, completano le proposte attuali nella fase 3 del TC39. In pratica, possono verificarsi errori. Inoltre, puoi trovare lo stesso Simile, si collega alle pagine dei plug-in per la fase 2 e precedenti. Queste pagine si collegheranno a pacchetti che includono sia proposte Stage 3 sia proposte meno stabili.

  • Preset Babel 'env' : questo preset Babel supporta le proposte completate, selezionando i pacchetti corretti necessari per supportare queste funzionalità in un ambiente noto. Ad esempio, un nodeeseguibile locale richiede meno plug-in rispetto a un browser meno recente. Si può pensare al plug-in 'stage-4' che supporta le funzionalità future approvate.

In breve, è necessario occuparsi solo di queste funzionalità preliminari se le si utilizza. Se hai bisogno di usarli, scegli il numero più alto di stage che ha quello che ti serve. Se vuoi solo un'installazione giocattolo con caratteristiche folli per discutere del dispositivo di raffreddamento dell'acqua, vai avanti e afferra la fase 0.


grazie, quindi babel-env è una specie di configurazione consigliata da babel
Webwoman

4

Questo è il miglior punto di partenza per capire. Cosa sono i preset babele

Un estratto dal link:

Stage 0 - Strawman: solo un'idea, possibile plug-in Babel.
Fase 1 - Proposta: su cui vale la pena lavorare.
Fase 2 - Bozza: specifica iniziale.
Fase 3 - Candidato: specifiche complete e implementazioni iniziali del browser.
Fase 4 - Fine: verrà aggiunta alla prossima versione annuale

Immagine generale :

  1. Con il tempo Javascript si sta evolvendo e sempre più funzionalità vengono aggiunte alla lingua.
  2. I browser devono anche fare molto lavoro in modo da poter implementare queste nuove funzionalità per essere comprese da loro. Questo processo in generale è molto più lento del ritmo che JavaScript sta evolvendo.
  3. Ma gli sviluppatori vogliono usare le nuove funzionalità del linguaggio poiché rendono più facile per loro scrivere, capire, mantenere il codice.
  4. Quindi gli sviluppatori scrivono il loro codice usando le nuove funzionalità di Javascript, ma prima che quel codice raggiunga i browser, passa attraverso un processo di generazione in cui usando un po 'di magia, tutto il codice con nuove funzionalità viene trasformato in codice comprensibile dal browser. cioè nuove funzionalità di Javascript ma codificate usando i costrutti comprensibili di linguaggio del browser.
  5. La magia di costruzione può essere eseguita usando strumenti, uno dei quali è Babele.
  6. Il modo in cui Babel funziona è che richiede un set di plugin. Ognuno di questi plugin potrebbe riferirsi alla trasformazione di una particolare nuova funzionalità di Javscript in costrutti di linguaggio comprensibili dal browser.
  7. Esistono centinaia di tali plug-in, ognuno dei quali si riferisce a diverse nuove funzionalità di Javascript. Queste funzionalità possono o meno essere parte delle specifiche Javascript finali. E se non finisce mai con le specifiche Javascript finali, nessuno dei browser implementerà questa funzione. Quindi, se uno sviluppatore utilizza qualsiasi funzione sperimentale di JS usando il plugin babel, è il rischio che sta correndo. Se non finisce mai nelle specifiche, quella parte di codice dovrà sempre essere traspilata prima di essere distribuita ai browser.
  8. Questo rischio è classificato in vari livelli per indicare le possibilità che qualsiasi funzionalità raggiunga la specifica finale.
  9. Inoltre babel ha raggruppato questi plugin in vari set, che è chiamato a presetin termini di babel. E ogni preset contiene plugin di vari livelli di rischio.
  10. preset-0Significa che ha plugin per funzionalità che sono molto sperimentali e quindi ad alto rischio di arrivare alle specifiche finali. È come un'idea che è venuta a uno sviluppatore che Javascript dovrebbe avere una caratteristica particolare, e ha fatto un po 'di lavoro per portarlo al processo di proposta del TC-39.
  11. preset-1 Contiene i plug-in per le idee di funzionalità accettate dal TC-39 e trovano che valga la pena lavorare.
  12. preset-2Plugin per funzionalità in cui una bozza iniziale è pronta per la funzione. E continua ...

Quindi potrebbe succedere che una caratteristica dello Stage 0 abbia raggiunto lo Stage 2 in qualche tempo e finisca per essere nella prossima versione di Javascript ancora più tempo dopo.

Quindi, con ogni versione di questi preset Babel, puoi trovare diversi set di plugin in esso. Potrebbe anche accadere che una caratteristica della fase 0 abbia subito alcune modifiche e abbia apportato modifiche sostanziali al suo funzionamento. E ha raggiunto, diciamo fase 2 con un'API totalmente diversa. Quindi gli sviluppatori devono assicurarsi che quando aggiornano questi plugin apportino le necessarie modifiche al loro codice.


3

La domanda originale è "Qual è la differenza tra babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2 e babel-preset-stage-3", è strano che le risposte si concentrino sulla differenza " tra TC39 fase-0, fase-1 .. la terminologia "viene votata, mentre l'unica pertinente (anche se non accurata) è sotto votata. Per citare dal sito di babele:

Un predefinito Babel è un elenco condivisibile di plugin.

I preset ufficiali Babel Stage hanno monitorato il processo di stadiazione TC39 per nuove proposte di sintassi in JavaScript.

Ogni preset (es. Stage-3, stage-2, ecc.) Includeva tutti i plugin per quel particolare stage e quelli sopra di esso. Ad esempio, la fase 2 includeva la fase 3 e così via.

L'idea principale è "quelli sopra di essa". Non rispondo alla seconda metà poiché le risposte sopra sono molto valide in quella parte.


-20

Ce l'ho Ragazzi potete fare riferimento a https://babeljs.io/docs/plugins/preset-stage-0/

In breve, preset-stage-0contiene tutte le funzionalità che preset-stage-1ha e preset-stage-1contiene tutte le funzionalità che preset-stage-2ha e così via ...

La cifra più bassa è più potente. Nel tuo progetto, se non ti preoccupi di problemi, basta impostare stage-0...


15
Ma capisci cos'è stage-0, ecc. In realtà? Dal momento che dici "La cifra più bassa è più potente", credo di no.
Felix Kling,

2
In realtà, ho confuso il stagecon ES6, @RGraham lo hanno sottolineato The Babel Preset which contains only ES6 features is preset-es2015. Grazie!
flyingzl

Se vuoi avere problemi in seguito, usa solo stage-0! Alcune o tutte le funzionalità dello stage 0 potrebbero non essere incluse nelle specifiche ES. Quindi attenzione all'utilizzo delle funzionalità stage-0.
devsnd,

Non sono sicuro del motivo per cui questa risposta è così votata. Quello che sta dicendo è corretto. TC39 stage-0 sono fondamentalmente proposte non attendibili. Possono arrivare o meno alla proposta finale. Ma babel-preset-stage-0include tutti i plugin, che vanno da stage-0a stage-3. Significa che voglio tutte le funzionalità proposte, non importa se possono farcela o meno.
Gaurav Kumar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.