Яка різниця між babel-preset-етап-0, babel-preset-етап-1 тощо?


126

Моє питання: В чому різниця між babel-preset-stage-0, babel-preset-stage-1, babel-preset-stage-2і babel-preset-stage-3, і що це кращий вибір , коли ми починаємо з ES6?

Відповіді:


97

Етапні попередні передумови Бабеля прирівнюються до процесу TC39 та різних станів кожної пропозиції щодо можливої ​​зміни мови. Вони включають в себе реалізацію та поліфіли для всіх запропонованих змін на цьому етапі.

Все, що зараз Stage-0є, - це Strawman, а не ES6. Це майбутній Javascript і абсолютно не впевнений, що він коли-небудь перетворить його в будь-яку офіційну специфікацію ECMAScript.

Будь ласка, не встановлюйтеstage-0 так, щоб воно спрацювало, не розуміючи наслідків, які це матиме.

Набір Babel, який містить лише функції ES6 preset-es2015


3
Про що stage-1? Чи безпечно використовувати? Чи можуть stage-1бути припинені деякі функції та змінити API в майбутньому?
notgiorgi

4
@notgiorgi Безпечніше ніж , stage-0але аж ніяк не повністю безпечним від зміни або навіть повного старіння (див виклик конструктора пропозицію , яке було знято після того, як 1 етап). Але те ж саме можна сказати і про будь-який етап, окрім 4-го етапу (тобто завершеного).
CodingIntrigue

Ви можете замінити preset-es2015з babel-preset-node6цими днями, якщо працює вузол 6 або краще.
Дейв Саг

5
Або ще краще, babel-preset-envяке може націлити будь-яке середовище!
CodingIntrigue

5
Гайз Будь ласка, використовуйте babel-preset-envINSTEAD OF babel-preset-es2015. babel-preset-es2015майже застарів
vijay

53

Як переважно розроблено іншими відповідями. Етап 4 є найбільш стабільним, а етап 0 - найнебезпечнішим. Ось трохи розбиття на високому рівні за 5 етапів з попередніх відповідей та документації. Я додаю це, тому що коли я прийшов до цього, я очікував більш високого рівня розбиття того, що кожен етап:


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

Готовий до включення в стандарт ECMAScript, пройшов тестування і буде частиною наступної редакції


3 етап: канд

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


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

Подальша підтримка плагінів виконана якнайбільше. Вимоги до них задовольняються здебільшого лише поступовими змінами на шляху. Очікується, що семантика та апі завершаться. Це, швидше за все, стане частиною специфікації.


Етап 1: Пропозиція Концепція, яка була виявлена ​​та обрана для розгляду на цій фазі, переважно очікується полізаповнення та демонстрації.


Етап 0: Солом’яник Ця назва змусила мене посміхнутися відповідно до TC-39, вона не має жодного роду пов'язаних, але, зважаючи на контекст, це категорія для понять, які не були обрані для подальшого вивчення або вивчення.

Кожен рівень інклюзивний, тоді як 4 включає 3, включає 2 і так далі ... Я сподіваюся, що це підсумок допоможе комусь у майбутньому.


15

Етапи представляють етапи, визначені процесом TC39, який працює з шаленими, але корисними ідеями до прийнятих стандартів, таких як ES6. Процес займає певний час, оскільки кожен кутовий випадок повинен бути обговорений, продуманий, перевірений, заповнений, ще трохи обговорений тощо. Тобто це орган, що відповідає стандартам. Мета полягає в тому, що вимова "ES6" матиме повне і повне значення, як і "ES5".

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

  • Огляд процесу TC39 : Це включає в себе вишукану діаграму про те, що означають етапи та як функція прогресує від стадії до етапу. Нижче - огляд TC39.

  • Активні пропозиції : Швидкий огляд того, на якому етапі перебувають певні пропозиції. Він також включає посилання на пропозиції "Готові, неактивні" та "Етап 0". Сьогодні, квітень 2017 року, поля публічного класу перебувають на етапі 2, це означає, що він точно описаний, а рецензенти призначені, але не повністю переглянуті.

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

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

Підсумовуючи це, вам потрібно мати справу з цими функціями попереднього випуску лише тоді, коли ви їх використовуєте. Якщо вам потрібно їх використовувати, виберіть найбільшу кількість етапів, на яких є те, що вам потрібно. Якщо ви просто хочете встановити іграшку з божевільними функціями, щоб обговорити навколо водяного кулера, продовжуйте та захоплюйте етап 0.


спасибі, тому babel-env є своєрідною конфігурацією, яку рекомендують
дітки

4

Це найкраща відправна точка для розуміння. Що таке пресети

Уривок із посилання:

Етап 0 - Солом’яник: просто ідея, можливий плагін 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в термінах вавилони називається a . І кожна попередня налаштування містить плагіни різного рівня ризику.
  10. preset-0Це означає, що у нього є плагіни для функцій, які дуже експериментальні, і тому існує високий ризик зробити його до остаточних характеристик. Це схоже на ідею, яка прийшла до розробника, що Javascript повинен мати певну особливість, і він провів певну роботу, щоб перенести його на процес пропозиції TC-39.
  11. preset-1 Він містить плагіни для ідей для функцій, прийнятих TC-39, і над ними варто попрацювати.
  12. preset-2Плагіни для функцій, де початкова чернетка готова до цієї функції. І це продовжується ..

Тож може статися, що функція на етапі 0 через деякий час досягла 2-го етапу, а згодом ще в наступному випуску Javascript.

Отже, з кожною версією цих пресетів Babel ви можете знайти в ньому різний набір плагінів. Також може статися, що функція на етапі 0 зазнала певних змін, і вона внесла зміни в те, як вона функціонує. І він досяг, скажімо, етап-2 із зовсім іншим API. Тому розробники повинні переконатися, що під час оновлення цих плагінів вони вносять необхідні зміни до свого коду.


3

Оригінальне запитання: "Яка різниця між babel-preset-етап-0, babel-preset-етап-1, babel-preset-етап-2 та babel-preset-етап-3", дивно, що відповідає, зосереджуючись на "різниці між TC39 етап-0, етап-1 .. термінологія "проголосують, тоді як єдиний релевантний (хоча і не точний) проголосований. Цитувати з сайту babel:

Попередньо встановлений Babel - це спільний список плагінів.

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

Кожна попередня установка (наприклад, етап 3, етап 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...


15
Але ти розумієш, що ж таке stage-0насправді? Оскільки ви говорите "Нижня цифра є більш потужною". Я вважаю, що ні.
Фелікс Клінг

2
Власне, я переплутав stageіз ES6, @RGraham на це вказав The Babel Preset which contains only ES6 features is preset-es2015. Дякую!
flyingzl

Якщо ви хочете мати проблеми згодом, просто використовуйте етап-0! Деякі або всі функції етап-0 можуть взагалі не ввійти в специфікацію ES. Тож остерігайтеся використання функцій етап-0.
devsnd

Не впевнений, чому ця відповідь так проголосується. Те, що він говорить, правильно. TC39 етап-0 - це в основному пропозиції, які є дуже недовірливими. Вони можуть або не можуть внести його до остаточної пропозиції. Але babel-preset-stage-0включає всі плагіни, починаючи від і stage-0закінчуючи stage-3. Це означає, що я хочу всіх запропонованих функцій, незалежно від того, чи зможуть вони зробити це пропозицією чи ні.
Гаурав Кумар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.