Автор оригинала: FreeCodeCamp Community Member.
Генри Чжу
Двигаясь вперед с V7, мы решили, что лучше остановить публикацию стадии пресетов в Вавиле (например, @ Babel/Preset-Stage-0 ).
Мы не приняли это решение легкомысленно и хотели показать контекст за взаимопомещением между TC39, Babel и сообществом.
Некоторые истории
Предварительная установка Babel является широким списком плагинов.
Официальные пресеты в основном этапе Babel отслеживал TC39 Процесс постановки Для нового синтаксические предложения в JavaScript.
Каждый предустановленный (Ex. Stage-3 , Stage-2 и т. Д.) Включали все плагины для этой конкретной сцены и выше его. Например, Этап-2 включены Этап-3 , и так далее.
Это позволило пользователям, которые хотели использовать экспериментальный синтаксис, чтобы просто добавить предустановку, вместо того чтобы настроить/установить каждый отдельный плагин.
Мы на самом деле добавлено Этап вскоре после выпуска V6 Babel V6 (ранее он был флагом конфигурации в V5). Ниже показано старший пример.
Проблемы
Эти пресеты были удобным способом использования того, что мы все хотели: новый, блестящий », но чтобы быть определенным« будущим JavaScript ».
Оглядываясь назад, это работало очень хорошо! (Может быть, слишком хорошо?)
Слишком хорошая работа?
Языки, как CoffeeScript и инструменты, как Traceur помог установить идею составления JavaScript. Babel сделал его еще проще, чтобы оба использовать новый/будущий синтаксис и интегрировать с существующей инструментацией. Ожидания изменились от скептицизма и беспокоятся полностью охватывать экспериментальную.
Наверное, мы не будем там, где мы, если не для широкого принятия компиляторов, таких как Бабел: это ускорило использование (и обучение) ES2015 до гораздо большей аудитории. Рост реакции дальнейшего заправки, в качестве его синтаксиса JSX, свойства классов и отдохну/распределения объекта привел к людям, знал немного больше об этих предложениях синтаксиса.
Babel стал одноразовой настроек для людей, никогда не буду думать снова. Это стало базовой инфраструктурой, скрытой за другими инструментами, пока не было SyntaxError вопросы зависимости или проблемы интеграции. Просто используйте Этап-0 Отказ
Это было удивительно, чтобы увидеть в некотором смысле, поскольку это означало, что эти идеи были протестированы в дикой природе даже в производственных условиях. Тем не менее, это также означало, что многие компании, инструменты и люди сталкиваются с некоторыми проблемами, если предложение изменено в значительной степени (или даже вообще сброшено).
Взад и вперед
За прошедшие годы мы подняли много вопросов для обсуждения того, что делать с пресетами сцены в # 4914 , # 4955 , # 7770 Отказ Я даже написал в старшем посте о Babel 7.0, который сказал, что мы не были … удалить их ?.
Тем не менее, мы обнаружили, что сохранение стадии предустановки приведет к проблемам даже для самого бабела:
- Это была распространенная проблема, чтобы спросить что-то вроде: «Какие пресеты необходимы для использования асинхронных функций?» Для людей было бы неясно знать именно то, что
Этап-0имел в виду, и немногие люди будут смотреть на егоPackage.jsonили источник. - Удаление плагина предложения в стадии 3 (после того, как он перемещается на стадию 4) на самом деле является нарушением изменение. Эта проблема усугубляется, когда вы пытаетесь использовать
@ babel/preset-envне скомпилировать родом, поддерживаемое предложение.
“ES7 декораторы”
Часть проблемы именно вокруг вещей, и, как мы часто слышим, название вещей трудно.
Было много названий для сама ES6: Harmony, Es Далее, ES6, ES2015. Когда люди слышат о новых идеях, имеет смысл просто выбрать последнее число и прикрепить его имя.
Это совершенно понятно, что это происходит, не осознавая его, но продолжая делать это, устанавливает разные ожидания для того, как развивается язык. Нечего чувствовать себя виновным в том, что мы учимся как сообщество и напоминаем друг с другом, как работает JavaScript.
Jay Phelps написал хороший Статья Об этой теме. Он объясняет, что было бы лучше позвонить им на «сцену», в настоящее время они находятся: «Декораторы 2 этапа» или просто просто «предложение оформлений».
Разумным рассуждением является то, что высказывание «декораторы ES7» предполагают, что Ожидается, что декораторы будут в ES7. Я упомянул об этом в моем Последнее сообщение о компиляции Node_Modules Но находясь на конкретном этапе не гарантирует многое: предложение может остановиться, двигаться назад или полностью удалить.
Мы хотели выделить этот факт, когда мы решили изменить имена предложений плагинов от @ Babel/Plugin-Transform- к @ Babel/Plugin-предложение .
Babelscript
Наличие пресетов для предложений, так как рано в процессе, может подразумевать, что эти предложения гарантированно будут двигаться вперед или иметь стабильную реализацию.
TC39 Призывает предостережение при использовании стадии 2 или ниже предложений, поскольку оно может привести к непреднамеренному давлению сообщества, чтобы сохранить реализацию, а не улучшить его для боязма, чтобы нарушить существующий код или экосистемную фрагментацию (например, использование другого символа, как # вместо @ для декораторов).
Люди шутят, что разработчики, которые используют Babel, используют «Babelscript» вместо JavaScript, подразумевают, что как-то, как только плагин Babel сделан для определенной функции, что должно означать, что это «фиксировано» или официально часть языка уже (что неверно) Отказ Для некоторых, первая мысль для людей, когда они видят новый синтаксис/идею (этап «-1»), является ли для него плагин Babel.
Настройка ожиданий
После того, как компиляторы, как Бабел, сделали это обычной практикой для людей, чтобы написать ES2015, для разработчиков было естественно, чтобы разработчики могли попробовать даже более новые и более экспериментальные «функции». То, как это работало в Вавилее, было использовать Этап Флаг в предыдущих версиях или Stage-X пресеты.
Будучи наиболее удобным способом выбора в любой новой функции, он быстро стал по умолчанию для людей при настройке Babel (хотя в Babel V6 она переехала, чтобы ничего не делать по умолчанию, что вызвало множество жалоб).
Было много хороших дискуссий даже много лет назад, но это было не самое простая вещь для навигации: мы не хотели бы наказывать пользователей, которые поняли компромиссы, поставив консоль S При использовании этого, и не имея опцию вообще казалось необоснованным в то время.
Слепо, выбирая на сцену 0 (было ли у нас это по умолчанию) или люди, которые выбирают, чтобы сделать это, кажется опасным, но и никогда не использование каких-либо предложений чрезмерно осторожно. В идеале все должны были принять обоснованное решение о видах особенностей, которые кажутся разумными для них и используют их мудро, независимо от того, на каком этапе они есть. Майк Пенниси писал Отличный пост об этих проблемах.
Не наше намерение угрожать, спешить или принуждать к удельным вещам в экосистему или JavaScript, а добросовестно поддерживать реализацию/дискуссии по новым идеям.
Другие соображения
Мы также могли бы попытаться:
- Переименуйте пресеты Чтобы лучше означать уровень устойчивости (не решает проблему версии)
- Лучшие стратегии управления версиями: самостоятельно версия пресетов и обновление их сразу при необходимости, возможно, использовать
0.x. - Warn/Ошибка для старых устаревших версий предустановок
В конце концов, люди все равно должны посмотреть, какие предложения находятся на том, на каком этапе узнают, какие из них использовать, если мы сохраняем этапы.
Почему сейчас?
Почему бы не удалить его раньше? Предсеты на этапе были частью Бабела в течение многих лет, и возникли проблемы с добавлением более «сложности» для использования Бабела. Многие оснащены инструментами, документацией, статьями и знаниями были построены вокруг пресетов стадии. Ранее мы думали, что было лучше официально поддерживать пресеты, поскольку кто-то еще (и будет) неизбежно создает их.
Мы пытаемся определить правильный уровень отзывов: если это только Комитет, который решает, что происходит на языке, это может привести к тому, что не требуется нуждающиеся функции. Но если сообщество ожидает, что в результате прогресса экспериментальные предложения считаются стабильными или ОК для использования в производстве без последствий, то у нас будут другие вопросы. Мы все хотим двигаться вперед и действовать с намерением: не спешиться, но не быть слишком осторожным. Babel – это правильное место, чтобы сделать это эксперименты, но зная, где необходимы границы.
Удаление предустановок будет считаться «особенностью», поскольку это означает, что кто-то должен будет провести явное решение использовать каждое предложение. Это разумно для любого предложения, поскольку все они имеют различные уровни нестабильности, полезности и сложности.
Мы полностью ожидаем, что некоторые первоначальные обратная комната Из этого, но в конечном итоге чувствую, что удаление стадии пресетов – лучшее решение для нас всех в долгосрочной перспективе. Тем не менее, удаление предыдущих значений по умолчанию или удаление стадии предустановок не означает, что мы не заботимся о простоте использования, новых пользователей или документации. Мы работаем с тем, что мы можем держать проект стабильной, предоставить инструменты для того, чтобы сделать все лучше, а документировать то, что мы знаем.
Миграция
TL; DR в том, что мы снимаем пресеты сцены. На некоторых уровнях люди должны будут отказаться и знать, какие предложения используются вместо того, чтобы предполагать, что люди должны использовать, особенно учитывая нестабильную природу некоторых из этих предложений. Если вы используете другой предустановленную или нашущую инструментов, (например, Create-raction-App ) Возможно, что это изменение не влияет на вас напрямую.
Мы устарели на сценические пресеты как 7.0.0-beta.52 Отказ Если вы не хотите менять свой конфиг сейчас, мы бы предложили вам PIN-код Версии к Бета.54 пока вы не сможете обновить. После бета.54. Мы будем бросать ошибку с сообщением, говорящим, как мигрировать. И убедитесь, что все ваши версии одинаковы в пререере.
В качестве альтернативы вы можете сделать свой собственный предустановку, который содержит те же плагины и обновить их, как вы, пожалуйста. В будущем мы можем захотеть работать над Babel-init Это может помочь вам настроить плагины интерактивно или обновлять Babel-Upgrade Сам перечислять и добавить текущие сценические плагины. Возможно, Babel должен оставаться на низкоуровневом инструменте и полагаться на другие инструменты для более высокого уровня/рамки, такие как Create-React-App справиться с этими вариантами для людей.
Предотвращение блокировки предложения
Джеймс Димиоя написал пост В последнее время об изменениях использования оператора трубопровода ( | & GT;).
Основной точкой в посте заключается в том, что сам предложение находится в потоке и имеет несколько вариантов для изучения. Поскольку мы хотели бы реализовать все три текущих возможности как плагины Babel для спецификации обратной связи, так и отзывы пользователей, мы верили, как используется плагин, также следует измениться. Это относительно новый подход для TC39 и Babel!
Ранее мы добавим плагин предложения к конфигурации и это было. Теперь мы удаляем поведение по умолчанию и попросите пользователей выбрать флаг, который показывает, какое предложение выбрано. Мы даем понять, что на данный момент нет фиксированного (или даже предпочтительного) варианта.
Это то, что мы хотели бы продолжать движение вперед в качестве другого указания, что эти предложения открыты для изменения и обратной связи от всех нас. Удаление стадии предустановок делает это еще проще, как до того, как мы должны были пропустить эти варианты, даже если вы не использовали синтаксис.
Экосистемное обслуживание бремени
Язык «синтаксический бюджет» не просто распространяется на сложность самого языка, но может простираться до инструмента. Каждое новое добавление синтаксиса приносит новый нагрузка для сопровождающих других проектов JavaScript.
Как только новый синтаксис предлагается, многие вещи нуждаются в обновлении: анализаторы ( Вавилон ), выделение синтаксиса ( Язык-бабел ), ЛИНТЕРЫ ( Babel-Eslint ), тестовые рамки ( шума |/ ava Несомненно , Форматтеры ( Reettier ), покрытие кода ( Istanbul ), Minifiers ( Babel-minify ) и многое другое.
Там было много вопросов, вызванных проектами, как Желудь , Eslint , jshint , Tymdercript и другие, чтобы поддержать этап 0 предложений, потому что они были в Вавиле. Там не так много проектов, которые будут придерживаться политики, которая требовала их поддержать любое предложение, поскольку это было бы чрезвычайно требовать поддерживать. Во многих отношениях удивительно, что мы даже пытаемся справиться с ним в сам Бабел, учитывая постоянные обновления и оттуды.
Кто делает эту работу, и наша обязанность убедиться, что все работает? Каждый из тех проектов (в основном добровольцев) не хватает помощи почти в каждом аспекте, и все же мы постоянно получаем жалобы по этому поводу по этому поводу. Как мы, как сообщество, чтобы взять на себя ответственность за решение с нашей инфраструктурой (не отлично с открытым исходным кодом в целом)?
Бабел взял на необычное бремя поддержки этих экспериментальных особенностей. В то же время разумно, что другие проекты принимают более консервативную политику. Если вы хотите увидеть новые языковые функции, поддерживаются по всей экосистеме, Способствовать TC39 И этот проект, чтобы принести эти предложения на этап 4.
Будущее
Целью данного проекта является выступать в качестве части процесса TC39: будучи ресурсом для реализации более новых (Stage 0-2) предложений и получение отзывов от пользователей, одновременно поддерживая более старые версии JavaScript. Мы надеемся, что этот пост пролится больше света о том, как мы пытаемся, как можно лучше, чтобы лучше выровнять этот проект в экосистеме JavaScript. Мы будем выпустить RC для V7 в ближайшее время!
Если вы цените этот пост и работа, которую мы делаем на Вавиле, вы можете поддержать меня на Парреон спросите свою компанию спонсировать нас на Открытый коллектив Или лучше заставить вашу компанию связаться с Babel как часть вашей работы. Мы ценим коллективную собственность.
С благодаря всем рецензенты Действительно Не стесняйтесь давать отзывы на Twitter Отказ
Первоначально опубликовано в https://babeljs.io/blog/2018/07/27/removing-babels-stage-sesets Отказ
Оригинал: “https://www.freecodecamp.org/news/why-we-removed-babels-stage-presets-explicit-opt-in-of-experimental-proposals-cd038c69115a/”