В чем разница между babel-preset-stage-0, babel-preset-stage-1 и т. Д.?

126

Мой вопрос: В чем разница между babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2и babel-preset-stage-3, и что это лучший выбор , когда мы начинаем с ES6?

flyingzl
источник

Ответы:

97

Предустановки сцены Babel приравниваются к процессу TC39 и различным состояниям каждого предложения для потенциального изменения языка. Они включают реализации и полифиллы для всех предлагаемых изменений на этом этапе.

Все, что сейчас Stage-0есть, - это Strawman, а не ES6. Это будущий Javascript, и нет уверенности, что он когда-либо войдет в какую-либо официальную спецификацию ECMAScript.

Пожалуйста, не устанавливайте простоstage-0 так, чтобы он работал, не понимая, к каким последствиям это приведет.

Пресет Babel, который содержит только функции ES6, preset-es2015

CodingIntrigue
источник
3
О чем stage-1? Насколько безопасно использовать? Могут ли некоторые stage-1функции быть устаревшими и изменены API в будущем?
notgiorgi 03
4
@notgiorgi Безопаснее чем , stage-0но отнюдь не полностью безопасным от изменения или даже полного устаревания (см вызов конструктора предложение , которое было снято после того, как 1 этап). Но то же самое можно сказать о любом этапе, кроме этапа 4 (т.е. завершенного).
CodingIntrigue 03
Возможно, вы захотите заменить его preset-es2015на babel-preset-node6эти дни, если используете Node 6 или лучше.
Дэйв Саг,
5
Или еще лучше, babel-preset-envкоторый может быть нацелен на любую среду!
CodingIntrigue
5
Guyz Пожалуйста, используйте babel-preset-envВМЕСТО babel-preset-es2015. babel-preset-es2015почти устарело
vijay
53

Как в основном описано другими ответами. Этап 4 является наиболее стабильным, а этап 0 - наиболее опасным. Вот небольшая разбивка на высоком уровне для 5 этапов из предыдущих ответов и документации. Я добавляю это, потому что, когда я подошел к этому, я ожидал более подробного разбора того, что представляет собой каждый этап:


Этап 4: Завершено

Готов к включению в стандарт ECMAScript, прошел тестирование и будет частью следующей версии


Этап 3: Кандидат

Включает полный текст спецификации и включает плагины, которые в основном были протестированы и предоставлены с отзывами. Решение готово, и все дальнейшие изменения основаны на опыте внедрения.


Этап 2: Проект

Дальнейшая поддержка плагинов завершена в максимально возможной степени. Требования к ним выполняются в основном с постепенными изменениями. Ожидается, что семантика и api будут полными. Скорее всего, он станет частью спецификации.


Этап 1: Предложение . Концепция, которая была обнаружена и выбрана для изучения на этом этапе, в основном ожидаются полифиллы и демонстрации.


Стадия 0: Strawman Это имя заставило меня усмехнуться: в соответствии с TC-39 у него нет никаких ограничений, но, учитывая контекст, это категория для концепций, которые не были выбраны для дальнейшего изучения или изучения.

Каждый уровень включает в себя, тогда как 4 включает 3 включает 2 и так далее ... Я надеюсь, что это суммирование поможет кому-то в будущем.

Позвонить в
источник
15

Этапы представляют собой этапы, как определено процессом TC39, который превращает функции из сумасшедших, но полезных идей в принятые стандарты, такие как ES6. Процесс занимает некоторое время, так как каждый угловой случай необходимо обсудить, обдумать, протестировать, заполнить полифиллами, еще немного обсудить и т. Д. То есть это орган стандартизации. Цель состоит в том, чтобы сказать «ES6» было полное и законченное значение, так же как и «ES5».

На практике требования к вашему проекту могут варьироваться от использования проверенных и верных до экспериментов с очень удобными, хотя и туманными языковыми функциями. Возможно, вы захотите начать с этих ссылок:

  • Обзор процесса TC39 : он включает в себя изящную диаграмму того, что означают этапы и как функции переходят от этапа к этапу. Ниже представлен обзор TC39.

  • Активные предложения : краткий обзор того, на каком этапе находятся определенные предложения. Он также включает ссылки на завершенные, неактивные и нулевые предложения. Сегодня, в апреле 2017 года, поля общедоступных классов находятся на этапе 2, что означает, что они точно описаны и рецензенты назначены, но не полностью проверены.

  • Предустановленный пакет Babel для этапа 3 : страница плагина со ссылками на Git и NPM для всех предложений этапа 3. По сути, этот подключаемый модуль извлекает набор пакетов, которые теоретически полифицируют текущие предложения на этапе 3 TC39. На практике могут возникать ошибки. Кроме того, вы можете найти аналогичные. Аналогично, это ссылки на страницы плагинов для Этапа 2 и ниже. Эти страницы будут ссылаться на пакеты, включающие как предложения этапа 3, так и менее стабильные предложения.

  • Предустановка Babel 'env' : эта предустановка Babel поддерживает завершенные предложения, выбирая правильные пакеты, необходимые для поддержки этих функций в известной среде. Например, для локального nodeисполняемого файла требуется меньше подключаемых модулей, чем для более старого браузера. Это может быть плагин "stage-4", который поддерживает утвержденные будущие функции.

Таким образом, вам нужно иметь дело с этими предварительными функциями, только если вы их используете. Если вам все же нужно их использовать, выберите наибольшее количество ступеней, на которых есть то, что вам нужно. Если вы просто хотите, чтобы вокруг кулера для воды обсуждалась игрушечная инсталляция с сумасшедшими функциями, возьмите стадию 0.

Чарльз Мерриам
источник
спасибо, так что babel-env - это своего рода рекомендованная конфигурация babel
Webwoman
4

Это лучшая отправная точка для понимания. Что такое пресеты Babel

Отрывок из ссылки:

Этап 0 - Strawman: только идея, возможный плагин Babel.
Этап 1 - Предложение: над этим стоит поработать.
2 этап - Эскиз: начальная спец.
Этап 3 - Кандидат: полная спецификация и начальные реализации браузера.
Этап 4 - Завершено: будет добавлено в следующий годовой выпуск

Общая картина :

  1. Со временем Javascript развивается, и в язык добавляется все больше и больше функций.
  2. Браузеры также должны проделать большую работу, чтобы они могли реализовать эти новые функции, чтобы они были понятны им. Этот процесс в целом намного медленнее, чем темпы развития Javascript.
  3. Но разработчики хотят использовать новые возможности языка, поскольку это облегчает им написание, понимание и поддержку кода.
  4. Таким образом, разработчики пишут свой код с использованием новых функций Javascript, но прежде, чем этот код достигнет браузеров, он проходит процесс сборки, в котором с помощью некоторой магии весь код с новыми функциями преобразуется в код, понятный браузеру. т.е. новые функции Javascript, но закодированные с использованием понятных для браузера конструкций языка.
  5. Магию сборки можно выполнять с помощью инструментов, одним из которых является Вавилон.
  6. Принцип работы Babel заключается в том, что он требует набора плагинов. Каждый из этих плагинов может относиться к преобразованию конкретной новой функции Javscript в понятные браузеру конструкции языка.
  7. Существуют сотни таких плагинов, каждый из которых относится к различным новым функциям Javascript. Эти функции могут быть или не быть частью окончательной спецификации Javascript. И если он так и не дойдет до окончательной спецификации Javascript, ни один из браузеров не будет реализовывать эту функцию. Поэтому, если какой-либо разработчик использует какую-либо экспериментальную функцию JS с помощью плагина babel, это риск, который он / она принимает. Если он никогда не попадает в спецификацию, эту часть кода всегда нужно будет транспилировать перед развертыванием в браузерах.
  8. Этот риск классифицируется по различным уровням, чтобы показать шансы того, что какая-либо функция достигнет окончательной спецификации.
  9. Также babel сгруппировал эти плагины в различные наборы, которые presetв терминах babel называются a . И каждый пресет содержит плагины с разным уровнем риска.
  10. preset-0Это означает, что у него есть плагины для функций, которые являются очень экспериментальными и, следовательно, имеют высокий риск дойти до окончательной спецификации. Это похоже на идею, которая пришла к разработчику, что в Javascript должна быть определенная функция, и он проделал некоторую работу, чтобы внести ее в процесс предложения TC-39.
  11. preset-1 Он содержит плагины для идей, принятых TC-39, и они считают, что над этим стоит поработать.
  12. preset-2Плагины для функций, для которых готов первоначальный черновик. И так продолжается ..

Таким образом, может случиться так, что функция на Этапе 0 через некоторое время достигнет Этапа 2 и в конечном итоге появится в следующем выпуске Javascript еще некоторое время спустя.

Следовательно, в каждой версии этих пресетов Babel вы можете найти разные наборы плагинов. Также может случиться так, что функция на этапе 0 претерпела некоторые изменения и внесла критические изменения в то, как она функционирует. И он достиг, скажем, второй стадии с совершенно другим API. Поэтому разработчики должны убедиться, что при обновлении этих плагинов они вносят необходимые изменения в свой код.

Гаурав Кумар
источник
3

Исходный вопрос: «В чем разница между babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2 и babel-preset-stage-3». Странно, что ответы сосредоточены на «разнице». между TC39 этап-0, этап-1 .. терминология "проголосовали против, в то время как единственный релевантный (хотя и не точный) был проголосован против. Цитата с сайта Babel:

Пресет Babel - это общий список плагинов.

Официальные пресеты Babel Stage отслеживали процесс TC39 Staging для новых предложений синтаксиса в JavaScript.

Каждый пресет (например, stage-3, stage-2 и т. Д.) Включал все плагины для этого конкретного этапа и те, что над ним. Например, этап 2 включает этап 3 и так далее.

Основная идея - «те, кто выше». Я не отвечаю на вторую половину, поскольку ответы выше очень хороши по этой части.

Пу Гуань
источник
-20

У меня есть его. Ребята, вы можете сослаться на https://babeljs.io/docs/plugins/preset-stage-0/

Короче говоря, preset-stage-0содержит всю функциональность, которая preset-stage-1есть, и preset-stage-1содержит все функции, которые preset-stage-2есть, и так далее ...

Младший разряд более мощный. В вашем проекте, если вас не беспокоят проблемы, просто установите stage-0...

flyingzl
источник
15
Но вы понимаете, что такое на stage-0самом деле? Поскольку вы говорите: «Нижняя цифра более сильная», я не верю.
Феликс Клинг
2
На самом деле я перепутал это stageс ES6, @RGraham указал на это The Babel Preset which contains only ES6 features is preset-es2015. Спасибо!
flyingzl
Если у вас возникнут проблемы позже, просто используйте stage-0! Некоторые или все функции stage-0 могут вообще не попасть в спецификацию ES. Так что остерегайтесь использования функций стадии 0.
devsnd
Не уверен, почему этот ответ так отвергнут. То, что он говорит, правильно. TC39 stage-0 - это в основном предложения, которым не доверяют. Они могут или не могут дойти до окончательного предложения. Но babel-preset-stage-0включает в себя все плагины, от stage-0до stage-3. Это означает, что мне нужны все предлагаемые функции, независимо от того, могут ли они быть внесены в предложение или нет.
Гаурав Кумар,