Jaka jest różnica między babel-preset-stage-0, babel-preset-stage-1 itd.?

126

Moje pytanie brzmi: Jaka jest różnica między babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2i babel-preset-stage-3, i co jest najlepszym wyborem, gdy rozwijamy się ES6?

flyingzl
źródło

Odpowiedzi:

97

Ustawienia wstępne sceny Babel odpowiadają procesowi TC39 i różnym stanom każdej propozycji potencjalnej zmiany języka. Obejmują one wdrożenia i wypełniacze dla wszystkich proponowanych zmian na tym etapie.

Wszystko, co aktualnie Stage-0jest w grze, to Strawman, a nie ES6. To przyszły Javascript i absolutnie nie jestem pewien, czy kiedykolwiek trafi do jakiejkolwiek oficjalnej specyfikacji ECMAScript.

Proszę nie tylko ustawiać, abystage-0 działało bez zrozumienia konsekwencji, jakie będzie to miało.

Babel Preset, który zawiera tylko funkcje ES6, jest preset-es2015

Kodowanie Zmęczenie
źródło
3
O co chodzi stage-1? Czy jest to bezpieczne w użyciu? Czy stage-1w przyszłości można wycofać niektóre funkcje i zmienić interfejsy API?
notgiorgi
4
@notgiorgi Bezpieczniejsze niż, stage-0ale w żadnym wypadku nie całkowicie bezpieczne przed zmianą lub nawet całkowitym wycofaniem (zobacz propozycję konstruktora wywołania, która została wycofana po etapie 1). Ale to samo można powiedzieć o każdym etapie innym niż etap 4 (tj. Ukończony).
CodingIntrigue
Może chcesz zamienić preset-es2015z babel-preset-node6tych dni, jeśli uruchomiony węzeł 6 lub wyższej.
Dave Sag
5
Lub jeszcze lepiej, babel-preset-envktóry może być skierowany do dowolnego środowiska!
CodingIntrigue
5
Guyz Użyj babel-preset-envZAMIAST babel-preset-es2015. babel-preset-es2015jest prawie przestarzały
vijay
53

Jak w większości rozwinięte w innych odpowiedziach. Etap 4 jest najbardziej stabilny, a etap 0 - najbardziej niebezpieczny. Oto krótkie podsumowanie na wysokim poziomie dla 5 etapów z poprzednich odpowiedzi i dokumentacji. Dodam to, ponieważ kiedy do tego doszedłem, spodziewałem się bardziej szczegółowego wyjaśnienia tego, czym jest każdy etap:


Etap 4: Zakończony

Gotowy do włączenia do standardu ECMAScript, przeszedł testy i będzie częścią następnej wersji


Etap 3: Kandydat

Zawiera pełny tekst specyfikacji i obejmuje wtyczki, które w większości zostały przetestowane i otrzymały opinie. Rozwiązanie jest kompletne, a wszystkie dalsze zmiany oparte są na doświadczeniach wdrożeniowych.


Etap 2: Projekt

Dalsze wsparcie dla wtyczek zostało ukończone w miarę możliwości. Wymagania w tym zakresie są spełniane głównie po wprowadzeniu jedynie stopniowych zmian. Oczekuje się, że semantyka i interfejs API będą kompletne. Najprawdopodobniej stanie się częścią specyfikacji.


Etap 1: Propozycja Koncepcja, która została odkryta i wybrana do zbadania na tym etapie, oczekuje się głównie wypełnień i prezentacji.


Etap 0: Strawman Ta nazwa sprawiła, że ​​zachichotałem zgodnie z TC-39, ale w pewnym sensie nie ma żadnego ograniczenia, ale biorąc pod uwagę kontekst, jest to kategoria pojęć, które nie zostały wybrane do kontynuacji lub zbadania.

Każdy poziom obejmuje, podczas gdy 4 obejmuje 3, obejmuje 2 i tak dalej ... Mam nadzieję, że to podsumowanie pomoże komuś w przyszłości.

Callat
źródło
15

Etapy reprezentują etapy zdefiniowane w procesie TC39, który obejmuje funkcje od szalonych, ale użytecznych pomysłów do zaakceptowanych standardów, takich jak ES6. Proces ten zajmuje trochę czasu, ponieważ każdy przypadek narożny musi zostać przedyskutowany, przemyślany, przetestowany, uzupełniony, przedyskutowany trochę więcej itd. To znaczy, że jest to organ normalizacyjny. Celem jest, aby powiedzenie „ES6” miało pełne i kompletne znaczenie, podobnie jak powiedzenie „ES5”.

W praktyce wymagania twojego projektu mogą wahać się od pozostania do wypróbowanych i wiernych do zabawy z tak wygodnymi, choć mglistymi funkcjami językowymi. Prawdopodobnie chcesz zacząć od tych linków:

  • Omówienie procesu TC39 : zawiera zgrabny wykres przedstawiający znaczenie poszczególnych etapów i postęp funkcji z etapu na etap. Poniżej znajduje się przegląd TC39.

  • Aktywne propozycje : Szybki przegląd tego, na jakim etapie znajdują się niektóre propozycje. Zawiera również łącza do propozycji gotowych, nieaktywnych i etapu 0. Dzisiaj, kwiecień 2017, Public Class Fields jest na etapie 2, co oznacza, że ​​jest dokładnie opisany i przydzielono recenzentów, ale nie jest w pełni sprawdzony.

  • Pakiet ustawień wstępnych Babel dla etapu 3 : Strona wtyczki z linkami do Git i NPM dla wszystkich propozycji etapu 3. Zasadniczo ta wtyczka pobiera kolekcję pakietów, które teoretycznie wypełniają obecne propozycje w TC39 etap 3. W praktyce mogą wystąpić błędy. Możesz również znaleźć podobne. Podobnie prowadzi do stron wtyczek dla etapu 2 i poniżej. Strony te będą zawierać linki do pakietów zawierających zarówno propozycje etapu 3, jak i mniej stabilne propozycje.

  • Babel Preset 'env' : To ustawienie Babel obsługuje gotowe propozycje, wybierając odpowiednie pakiety potrzebne do obsługi tych funkcji w znanym środowisku. Na przykład lokalny nodeplik wykonywalny wymaga mniej wtyczek niż starsza przeglądarka. Można sobie wyobrazić wtyczkę „stage-4”, która obsługuje zatwierdzone przyszłe funkcje.

Podsumowując, z tymi funkcjami w wersji wstępnej wystarczy korzystać, jeśli ich używasz. Jeśli musisz ich użyć, wybierz największą liczbę etapów, która ma to, czego potrzebujesz. Jeśli chcesz po prostu zabawkę z szalonymi funkcjami, aby porozmawiać o chłodnicy wody, przejdź do etapu 0.

Charles Merriam
źródło
dzięki, więc babel-env to rodzaj konfiguracji zalecanej przez babel
Webwoman
4

To najlepszy punkt wyjścia do zrozumienia. Co to są ustawienia wstępne Babel

Fragment z linku:

Etap 0 - Strawman: tylko pomysł, możliwa wtyczka Babel.
Etap 1 - Propozycja: warto nad tym popracować.
Etap 2 - Projekt: wstępna specyfikacja.
Etap 3 - Kandydat: pełna specyfikacja i wstępne implementacje przeglądarki.
Etap 4 - Zakończony: zostanie dodany do następnego rocznego wydania

Ogólny obraz :

  1. Z biegiem czasu Javascript ewoluuje i do języka dodaje się coraz więcej funkcji.
  2. Przeglądarki również muszą wykonać dużo pracy, aby mogły zaimplementować te nowe funkcje, aby były przez nie zrozumiałe. Ogólnie ten proces jest dużo wolniejszy niż tempo ewolucji Javascript.
  3. Jednak programiści chcą korzystać z nowych funkcji języka, ponieważ ułatwia im pisanie, rozumienie i konserwację kodu.
  4. Dlatego programiści piszą swój kod przy użyciu nowych funkcji JavaScript, ale zanim ten kod dotrze do przeglądarek, przechodzi przez proces kompilacji, w którym za pomocą magii cały kod z nowymi funkcjami jest transponowany na kod zrozumiały dla przeglądarki. tj. nowe funkcje Javascript, ale zakodowane przy użyciu zrozumiałych dla przeglądarki konstrukcji języka.
  5. Magię budowania można wykonać za pomocą narzędzi, jednym z nich jest Babel.
  6. Sposób działania Babel polega na tym, że wymaga zestawu wtyczek. Każda z tych wtyczek może odnosić się do przekształcenia określonej nowej funkcji JavaScript w zrozumiałe dla przeglądarki konstrukcje języka.
  7. Istnieją setki takich wtyczek, a każda z nich odwołuje się do innych nowych funkcji JavaScript. Te funkcje mogą, ale nie muszą być częścią ostatecznej specyfikacji Javascript. A jeśli nigdy nie dojdzie do ostatecznej specyfikacji Javascript, żadna z przeglądarek nie zaimplementuje tej funkcji. Więc jeśli jakikolwiek programista używa eksperymentalnej funkcji JS przy użyciu wtyczki Babel, istnieje ryzyko, które podejmuje. Jeśli nigdy nie znajdzie się w specyfikacji, ta część kodu zawsze będzie musiała zostać transponowana przed wdrożeniem w przeglądarkach.
  8. Ryzyko to jest podzielone na różne poziomy, aby wskazać szanse, że jakakolwiek funkcja osiągnie ostateczną specyfikację.
  9. Również babel pogrupował te wtyczki w różne zestawy, które presetw terminologii Babel nazywa się a . Każdy preset zawiera wtyczki z różnych poziomów ryzyka.
  10. preset-0Oznacza to, że ma wtyczki dla funkcji, które są bardzo eksperymentalne, a zatem istnieje duże ryzyko, że dotrą do ostatecznej specyfikacji. To jak pomysł, który przyszedł do dewelopera, że ​​Javascript powinien mieć określoną funkcję, i wykonał trochę pracy, aby doprowadzić ją do procesu propozycji TC-39.
  11. preset-1 Zawiera wtyczki do pomysłów na funkcje zaakceptowane przez TC-39 i uważają, że warto nad tym pracować.
  12. preset-2Wtyczki do funkcji, w przypadku których wstępna wersja robocza jest gotowa dla funkcji. I to trwa ...

Może się więc zdarzyć, że funkcja w etapie 0 osiągnęła etap 2 po jakimś czasie, a później pojawi się w następnej wersji Javascript.

Dlatego w każdej wersji tych ustawień Babel można znaleźć inny zestaw wtyczek. Może się również zdarzyć, że funkcja na etapie 0 przeszła pewne zmiany i wprowadziła istotne zmiany w sposobie działania. I osiągnął, powiedzmy, etap 2 z zupełnie innym API. Dlatego programiści muszą się upewnić, że aktualizując te wtyczki, wprowadzają niezbędne zmiany w swoim kodzie.

Gaurav Kumar
źródło
3

Pierwotne pytanie brzmi: „Jaka jest różnica między ustawieniem babel-etap-0, ustawieniem-babel-etap-1, ustawieniem-wstępnego-etapu-2-babel i ustawieniem-etapu-3-babel”, dziwne jest, że odpowiedzi skupiają się na „różnicy pomiędzy TC39 etap-0, etap-1 .. terminologia „zostanie głosowana, podczas gdy jedyna odpowiednia (choć nieprecyzyjna) jest głosowana w dół. Cytat ze strony babel:

Ustawienie wstępne Babel to lista wtyczek, którą można udostępniać.

Oficjalne presety Babel Stage śledziły proces TC39 Staging dla nowych propozycji składni w JavaScript.

Każdy preset (np. Stage-3, stage-2, itp.) Zawierał wszystkie wtyczki dla tego konkretnego etapu i te nad nim. Na przykład etap-2 obejmował etap-3 i tak dalej.

Podstawową ideą są „ci nad nim”. Nie odpowiadam na drugą połowę, ponieważ powyższe odpowiedzi są bardzo dobre w tej części.

Pu Guan
źródło
-20

Mam to. Możecie polecić https://babeljs.io/docs/plugins/preset-stage-0/

Krótko mówiąc, preset-stage-0zawiera całą funkcjonalność, która preset-stage-1ma i preset-stage-1zawiera wszystkie funkcje, które preset-stage-2ma i tak dalej ...

Niższa cyfra jest silniejsza. W swoim projekcie, jeśli nie chcesz zawracać sobie głowy problemami, po prostu ustaw stage-0...

flyingzl
źródło
15
Ale czy rozumiesz, czym stage-0właściwie jest itd.? Ponieważ mówisz „Niższa cyfra jest silniejsza”, uważam, że nie.
Felix Kling
2
Właściwie pomyliłem to stagez ES6, @RGraham zwrócił na to uwagę The Babel Preset which contains only ES6 features is preset-es2015. Dzięki!
flyingzl
Jeśli chcesz później mieć problemy, po prostu użyj stage-0! Niektóre lub wszystkie funkcje stage-0 mogą w ogóle nie znaleźć się w specyfikacji ES. Więc uważaj na używanie funkcji stage-0.
devsnd
Nie jestem pewien, dlaczego ta odpowiedź jest tak przegłosowana. To, co mówi, jest poprawne. TC39 stage-0 to w zasadzie propozycje, którym nie można ufać. Mogą, ale nie muszą, przejść do ostatecznej propozycji. Ale babel-preset-stage-0zawiera wszystkie wtyczki, od stage-0do stage-3. Oznacza to, że chcę wszystkich proponowanych funkcji, bez względu na to, czy mogą to być propozycje, czy nie.
Gaurav Kumar