Автор оригинала: FreeCodeCamp Community Member.
Генри Чжу
> 6 месяцев спустя фактический релиз https://twitter.com/left_pad/status/10342043303525007330352500736 !
Привет ?! Я Генри один из сопровождающих на Бабел Отказ
> Редактировать: у меня Оставшееся жизнь и сделали Парреон попытаться преследовать Работа над открытым исходным кодом полный рабочий день Пожалуйста, рассмотрите пожертвование (спросите свою компанию).
Быстрое вступление в Вавилону
Некоторые люди любят думать о Babel в качестве инструмента, который позволяет вам написать код ES6. Более конкретно, компилятор JavaScript, чем преобразует ES6 в код ES5. Это было довольно уместно, когда его имя было 6-55, но я думаю, что Бабел стал намного больше, чем это.
Теперь давайте вернемся немного. Причина, по которой это даже необходимо в первую очередь, в отличие от большинства языков на сервере (даже Node.js), версия JavaScript, которую вы можете запустить, зависит от вашей конкретной версии браузера. Так что не имеет значения, если вы используете последние браузеры, если ваши пользователи (которые вы хотите сохранить) все еще находятся на IE. Если вы хотите написать класс a {}
Например, тогда вам удачи – некоторое количество ваших пользователей получит SyntaxError
и белая страница.
Так вот почему Бабел был создан. Это позволяет писать версию JavaScript, которую вы хотите, зная, что она будет работать правильно на всех (более старых) браузерах, которые вы поддерживаете.
Но это не просто остановится в «ES6» (некоторые люди любят говорить ES2015). Babel, безусловно, расширился после первоначальной цели только компиляции кода ES6 и теперь компилирует любую версию ES20XX, которую вы хотите (последняя версия JavaScript) до ES5.
Текущий процесс
Одним из интересных вещей о проекте является то, что до тех пор, пока добавляется новый синтаксис JavaScript, Babel должен будет реализовать преобразование для его преобразования.
Но вы можете думать, почему мы даже должны отправлять сборкущую версию (больший размер кода) в браузеры, которые поддерживают этот синтаксис? Как мы даже знаем, какой синтаксис поддерживает каждый браузер?
Ну, мы сделали Babel-Preset-Env Чтобы помочь с этой проблемой, создавая инструмент, который позволяет вам указать, какие браузеры вы поддерживаете. Он автоматически преобразует только то, что эти браузеры не поддерживают родом.
Кроме того, Бабел (из-за использования в сообществе) имеет место, влияющее на будущее самого языка JavaScript! Учитывая, что это инструмент для преобразования кода JS, он также может быть использован для реализации любых предложений, представленных на TC39 (Технический комитет Ecma 39, группа, которая перемещает JavaScript вперед в качестве стандарта).
Существует целый процесс «предложение» проходит через стадии от 0 до стадии 4, когда он приземляется на язык. Babel, как инструмент, находится в нужном месте, чтобы проверить новые идеи и чтобы разработчики использовать его в своих приложениях, чтобы они могли дать обратную связь Комитету.
Это действительно важно по нескольким причинам: Комитет хочет быть уверенным в том, что изменения, которые они принимают, – это то, что хочет сообщество (последовательное, интуитивное, эффективное). Реализация неопределенной идеи в браузере медленная (C ++ в браузере против JavaScript в Babel), дорого, и требует, пользователи используют флаг в браузере против изменения файла Babel Config.
Поскольку Babel настолько повсеместной, есть хороший шанс, что реальное использование произойдет. Это сделает предложение намного лучше, чем если бы он был просто реализован без каких-либо венторов от сообщества разработчика в целом.
И это не просто полезно в производстве. Наш онлайн Реп Полезно для людей изучать сам JavaScript и позволяет им тестировать вещи.
Я думаю, что Babel находится в отличном положении, чтобы быть образовательным инструментом для программистов, чтобы они могли продолжать изучать, как работает JavaScript. Через вклад в сам проект, они узнают много других концепций, таких как AST, компиляторы, языковые спецификации и многое другое.
Я действительно взволнован будущем проекта и не могу дождаться, чтобы увидеть, где может пойти команда. Пожалуйста, присоединяйтесь и помогите нам!
Моя история
Это некоторые из причин, по которым я рад работать над этим проектом каждый день, особенно как сопровождающий. Большинство современных сопровождающих, в том числе сам, не создали проект, но присоединились через год после – и это все еще разумное думать, где я начал.
Что касается меня, я узнал необходимость и интересный проект. Я медленно и последовательно получился более вовлеченным, и теперь я смог получить мой работодатель, Behance , чтобы спонсировать половину моего времени на Бабел.
Иногда «поддержание» просто означает крепежные ошибки, отвечая на вопросы на нашу провину или Twitter или написать изменение изменений (это действительно до каждого из нас). Но в последнее время я снизил внимание на исправлениях ошибок и функции. Вместо этого я проводил некоторое время на размышления о более высоких проблемах, таких как: какое будущее этого проекта? Как мы выращиваем наше сообщество с точки зрения количества сопровождающих против количества пользователей? Как мы можем поддерживать проект с точки зрения финансирования? Где мы вписываемся в экосистему JavaScript в целом (образование, TC39 , инструмент)? И есть ли для нас роль для того, чтобы помочь новым людям присоединиться к открытому исходным кодам ( RGSOC и GSOC )?
Из-за этих вопросов, о чем я больше всего взволнован с этим выпуском, не обязательно, не обязательно, описанные в наборе функций (которые много: начальные реализации новых предложений, таких как оператор трубопровода (A | B) , A Новая напечатанная напечатана с помощью команды TS и файлов .babelrc.js).
Скорее, я в восторге от того, что все эти функции представляют собой тяжелую работу в год, пытаясь не нарушать все, балансируя ожидания пользователей (почему создание настолько медленного/кода, настолько большая, почему код не соответствует спецификации Достаточно, почему эта работа не работает без конфигурации, почему нет варианта для X) и поддержания твердой команды в основном добровольцев.
И я знаю, что наша отрасль имеет огромный фокус на «главных релизах», рассеиваемых особенностях и звездах, но это всего один день, когда исчезают. Я хотел бы предложить мы продолжать думать о том, что нужно, чтобы соответствовать толканию экосистемы перед здоровой модой.
Это может просто означать думать о психическом и эмоциональном бремене обслуживающего корабля. Это может означать, как думать о том, как предоставить наставничество, управление ожиданием, советы по балансу работы/жизни и другие ресурсы для людей, желающих принять участие, вместо того, чтобы просто поощрять разработчиков ожидать немедленной, бесплатной помощи.
Погружение в изменение
Ну, я надеюсь, тебе наслаждаться длинным изменением? Если вы заинтересованы в том, чтобы помочь нам, пожалуйста, дайте нам знать, и мы будем рады поговорить больше.
Мы начали новое Видео страница Так как люди хотели узнать больше о том, как Babel работает и вносит свой вклад. Эта страница состоит из видео конференц-рассказов о бабеле и связанных с этим концепциями из членов команды и людей в сообществе.
Мы также создали новый Страница команды ! Мы будем обновлять эту страницу в будущем с большим количеством информации о том, что люди работают, и почему они участвуют. Для такого большого проекта есть много способов принять участие и помочь.
Вот несколько основных моментов и быстрых фактов:
- Бабел исполнился 3 года на 28 сентября 2017 !
- Даниэль Переехал
Вавилон/Вавилон
иBabel/Babel-Preset-env
в главную бабаль монорепо, Babel/Babel Отказ Это включает в себя все истории Git, этикетки и проблемы. - Мы получили $ 1 тыс/месяц пожертвование От Facebook Открытый источник!
- Это самое высокое ежемесячное пожертвование, которое мы получили с самого начала (следующие самые высокие – 100 долларов в месяц).
- Тем временем мы будем использовать наши средства для встречи лично и отправлять людей на встречи TC39. Эти встречи каждые 2 месяца по всему миру.
- Если компания хочет конкретно спонсировать что-то, мы можем создавать отдельные проблемы для отслеживания. Это было трудно раньше, потому что нам пришлось выплатить из кармана или найти конференцию, чтобы говорить на том же неделе, чтобы помочь покрыть расходы.
Как ты можешь помочь
Если ваша компания хотела бы вернуть Поддерживая фундаментальную часть развития JavaScript и ее будущего, рассмотрите возможность пожертвовать нашему Открытый коллектив Отказ Вы также можете пожертвовать время разработчика, чтобы помочь поддерживать проект.
# 1: Помогите поддерживать проект (время разработчика на работе)
Инженер: В SQL Server Enterprise есть вещь, блокируя нас Компания: Давайте создадим звонок на следующей неделе с ними постоянное обсуждение, чтобы решить его следующий квартал Инженер: есть вещь, которую нам нужно в Вавиле, я могу проверить 2 дня с PR за это Компания: LOL Нет Это их работа https://t.co/icgaoj0dte.
Лучшее для Babel – найти людей, которые стремится помочь с проектом, учитывая огромное количество работы и ответственности, которые требуют. Опять же, Я никогда не чувствовал себя готовым быть сопровождающим, но как-то наткнулось на него. Но я только один человек, и наша команда – всего несколько человек.
# 2: Справочная разработка фонда
Компания: «Мы хотели бы использовать SQL Server Enterprise« MS: », который будет четверть миллиона долларов + $ 20 тысяч/месяц”: “Хорошо!” … Компания: «Мы хотели бы использовать Бабел« Бабел: »Компания« ОК! NPM I Babel –save »:« Cool »Babel:« Хотели бы вы помочь вносят вклад в финансовом отношении? » Компания: “лол нет”
Мы определенно хотим иметь возможность финансировать людей в команде, чтобы они могли работать полный рабочий день. Логан, в частности, оставил свою работу некоторое время назад и использует наши нынешние фонды на работу на неполный рабочий день Babel.
# 3 Способствуйте другими способами?
Например, Ангус сделал нас Официальная песня !
Модернизация
Мы также будем работать над инструментом обновления, который поможет Перепишите свой package.json/.babelrc Файлы и больше. В идеале это означает, что он изменяет любые необходимые изменения номера версии, пакет Revames и изменения конфигурации.
Пожалуйста, обратитесь к помощи и публиковать проблемы при попытке обновления. Это отличная возможность принять участие и помочь обновлению экосистемы!
Краткое изложение предыдущего поста
- Упал узел 0.10/0,12/5 Поддержка.
- Обновлено Предложения TC39
- Числовой сепаратор:
1_000.
- Дополнительный оператор цепочки:
A? .B.
Import.meta
(bodyble)- Дополнительное ловят связывание:
попробуйте {a} catch {}
- Bigint (Barseble):
2n
- Разделить экспортные расширения в
Экспорт-дефолт - от
иЭкспорт-нс-форма
.babelrc.js
Поддержка (конфиг с помощью JavaScript вместо JSON)- Добавлена новая напечатанная напечатана и отделила пресеты реагирования/расхода
- Добавлено Поддержка фрагмента JSX и различные обновления потока
- Убрал внутренний
Babel-Runtime
зависимость от меньшего размера
Недавно обновленные предложения TC39
- Оператор трубопровода:
A |> B
- Выражения высказывания:
() => бросить «привет»
- Нульский оператор коалиссы:
a ?? преступник
Устаренные годовые пресеты (например, Babel-Preset-Es20xx)
TL; DR: Используйте Babel-Preset-Env
Отказ
Что лучше, чем вы, чтобы решить, какие предустановки Babel используют? Сделав это для вас, автоматически!
Несмотря на то, что объем работы, которая вступает в поддержание списков данных, громко – снова, поэтому нам нужна помощь – она решает несколько проблем. Он гарантирует, что пользователи обновлены с помощью спецификации. Это означает меньше конфигурации/пакета путаницы. Это означает более легкий путь обновления. И это означает меньше вопросов о том, что такое.
Babel-Preset-Env
на самом деле довольно Старый Предустановите, который заменяет все другие синтаксические предустановки, которые вам понадобится (ES2015, ES2016, ES2017, ES20xx, последние и т. Д.).
Он компилирует последний ежегодный выпуск JavaScript (что угодно на этапе 4), который заменяет все старые пресеты. Но он также имеет возможность компилировать в соответствии с уточнением целевых сред: он может обрабатывать режим разработки, как последняя версия браузера или нескольких сборки, например, версия для IE. У него даже есть еще одна версия для вечнозеленых браузеров.
Не удаление стадии предустановок (Babel-Preset-Stage-X)
Уровень расстройства, если мы удалим сценические пресеты в Вавиле? (Явно нужен плагины предложения, поскольку они еще не JavaScript)
Мы всегда можем держать его в курсе, и, возможно, нам просто нужно определить лучшую систему, чем то, что текущие пресеты.
Прямо сейчас State Presets – это просто список плагинов, которые мы обновляем вручную после каждой встречи TC39. Чтобы сделать это управляемым, нам нужно разрешить большую версию ударов для этих «нестабильных» пакетов. Это частично, потому что сообщество в любом случае восстановит эти пакеты. Таким образом, мы также можем сделать это из официального пакета, а затем иметь возможность обеспечить лучшие обмен сообщениями и так далее.
Revames: Scoped Packages (@ Babel/X)
Вот опрос, который я выложу почти год назад:
Мысли на @Babeljs Использование NPM Scoped Packages для 7,0?
Затем, не многие проекты использовали навесные пакеты, поэтому большинство людей даже не знали, что они существовали. Возможно, вам пришлось заплатить за аккаунт NPM ORG тогда, тогда как теперь это бесплатно (и поддерживает невыразимые пакеты).
Вопросы с поиском нанесенных пакетов решаются, и загрузка считает работу. Единственный каменный блок левый – это то, что некоторые 3-й партийные реестры по-прежнему не поддерживают невыпущенные пакеты. Но я думаю, что мы в точке, где кажется довольно необоснованным ждать этого.
Вот почему мы предпочитаем навесные пакеты:
- Наименование сложно: нам не придется проверить, решил ли кто-то еще использовать нашу конвенцию именования для своего собственного плагина
- У нас есть подобные проблемы с пакетом на корточках
- Иногда люди создают
Babel-Preset-20xx
или какой-то другой пакет, потому что это смешно. Мы должны сделать проблему и электронное письмо, чтобы попросить его обратно. - У людей есть законный пакет, но это происходит то же самое, что и то, что мы хотели назвать это.
- Люди видят, что новое предложение слияние (вроде дополнительного цепочка или оператора трубопровода) и решить вилку и публиковать версию ее под тем же именем. Затем, когда мы публикуем, он говорит нам, что пакет уже опубликован? Поэтому я должен найти свою электронную почту и по электронной почте и по электронной почте и поддержку NPM, чтобы получить пакет обратно и повторно.
- Что такое «официальный» пакет и что такое пакет пользователя/сообщества с тем же именем? Мы получаем отчеты о людях, использующих это неправильные или неофициальные пакеты, потому что они предполагали, что она была частью Вавила. Одним из примеров этого был отчет о том, что
Вавилон-Эн
был переписан их.babelrc
файл. Это потребовалось некоторое время, чтобы понять, что это не былоBabel-Preset-Env
Отказ
Итак, кажется, довольно ясно, что мы должны использовать невыпущенные пакеты, и, если что-то, мы должны были сделать это намного раньше?!
Примеры изменений на выделенном имени:
Babel-Cli
->@ babel/cli
Babel-Core
->@ Babel/Core
Babel-Preset-Env
->@ Babel/preset-env
Revames: -Посмобал-
Любые предложения будут названы -пропозал-
Теперь следует означать, что они уже официально в JavaScript.
Итак, @ Babel/Plugin-Transform-класс - свойства
становится @ Babel/Plugin-предложение-класс - свойства
И мы назовем его, как только он попадет в стадию 4.
Revames: бросить год от имени плагина
Предыдущие плагины имели год на имя, но сейчас не нужно.
Итак, @ Babel/Plugin-Transform-ES2015-классы
становится @ Babel/Plugin-Transform - классы
Отказ
Поскольку годы использовались только для ES3/ES2015, мы ничего не изменили от ES2016 или ES2017. Тем не менее, мы обесцениваем эти пресеты в пользу предупреждений-ENV, а для шаблона литерального пересмотра мы только что добавили его к шаблону буквального преобразования для простоты.
Развитые зависимости и интеграции
Мы представляем одноранговые зависимости от @ Babel/Core
Для всех плагинов ( @ Babel/плагин-класс-свойства
), пресеты ( @ Babel/preset-env
) и пакеты верхнего уровня ( @ babel/cli
, babel -loader
).
Babel-Loader
Уже было Peerdependency
на Babel-Core
Так что это просто меняет это на @ Babel/Core
Отказ Это изменение мешает людям пытаться установить эти пакеты на неправильную версию Вавила.
Для инструментов, которые уже имеют Peerdependency
на Babel-Core
И не готов к основному удару (поскольку изменение зависимости от сверстников – это разрывное изменение), мы опубликовали новую версию Babel-Core
Чтобы преодолеть изменения новой версией babel-core @ 7.0.0-bridge.0 Отказ Для получения дополнительной информации проверить этот вопрос Отказ
Точно так же пакеты, как Гульп-Бабел
, Rollup-Plugin-Babel
и так на всех раньше было Babel-Core
как зависимость. Теперь у них просто будет Peerdependency
на @ Babel/Core
Отказ Из-за этого эти пакеты не должны ударить основные версии, когда @ Babel/Core
API не изменился.
# 5224: Независимое публикация экспериментальных пакетов
Я упоминаю это в Состояние Вавила В Версию
раздел. Вот …| Выпуск GitHub Отказ
Вы можете помнить, что после Babel 6 Babel стал набор пакетов NPM со своей экосистемой пользовательских пресетов и плагинов.
Однако, однако, мы всегда использовали «фиксированную/синхронизированную» систему управления версиями (так что пакет не находится на V7.0 или выше). Когда мы делаем новый выпуск, например V6.23.0
, только пакеты, которые обновили код в источнике, публикуются с новой версией. Остальные пакеты остаются как есть. Это в основном работает на практике, потому что мы используем ^
в наших пакетах.
К сожалению, эта система требует, чтобы основная версия была выпущена для всех пакетов, как только один пакет нуждается в нем. Это либо означает, что мы зарабатываем много небольших нарушений (ненужных), либо мы паруемся больших изменений в одном выпуске. Вместо этого мы хотим дифференцировать между экспериментальными пакетами (этап 0 и так далее) и все остальное (ES2015).
Из-за этого мы намерены сделать большую версию ударов к любым экспериментальным плагинам предложений, когда спецификация меняется, а не ожидание обновления всех Babel. Так что все, что является Это идет вместе с нашим решением потребовать от плагинов предложений TC39 для использования В отличие от Последнее сообщение Мы только что исправили слияние поведения, чтобы быть Более последовательно Отказ Конфигурация в с Babel автоматически обернет любые нативные встроенные, такие как Так что с этим вариантом что-то вроде: может превратиться в Если целевая среда происходит для поддержки полифиллирования, кроме Но для того, чтобы сделать это еще лучше, мы должны импортировать только многолифики, которые «используются» в самой кодовой базе. Почему импорт Так что если вы используете С выводом типа мы можем знать, если метод экземпляра вроде Shoutout в нашу команду добровольцев: Логан Действительно сильно толкнул, чтобы исправить много наших основных проблем, касающихся конфигов и многое другое. Он делает все это тяжелая работа. Брайан принимал поддержание большого количества предустановленной работы и что-то еще, что я делал раньше? Даниэль Всегда вошел, когда нам нужна помощь, будь то поддержание Babel-Loader или помогает переместить Babylon/Babel-Preset-env Refo. И же с Николо , Свен , Артем и Диого которые наступили в последний год, чтобы помочь. Я действительно с нетерпением жду выпуска (я тоже устал – это почти год?). Но я также не хочу торопиться, только потому, что. На протяжении всего этого выпуска было много взрослых и падения, но я, конечно, многому научился, и я уверен, что остальная часть команды также есть. И если я узнал что-нибудь вообще в этом году, я действительно должен посоветовать этот совет, а не просто писать об этом. «Прежде чем идти поддержание всего остального, сначала поддерживайте свое собственное тело» – мама?-пропозал-
название. Если спецификация меняется, мы сделаем основную версию удара к плагину и предустановленную принадлежущую (в отличие от того, чтобы просто сделать версию патча, которая может сломаться для людей). Затем нам нужно будет обесценить старые версии и установить инфраструктуру, которая автоматически обновит людей, чтобы они были в курсе того, что станет спецификацией (и поэтому они не застряли на чем-то. Мы не были Так повезло с декораторами.).Вариант ENV в .babelrc не устаревает!
env
Удается более высокий приоритет, чем элементы CORT Config. И вместо странного подхода только с использованием как плагинов и предустановок теперь сливается на основе их идентичности, так что вы можете сделать это:{
presets: [
['env', { modules: false}],
],
env: {
test: {
presets: [
'env'
],
}
},
}
Babel_env = test
Отказ Он заменит корневой конфигурацию root с тестом, который не имеет вариантов.Поддержка класса A Расширение массива (старейшее предостережение)
Массив
, Ошибка
. и Htmlelement
Так что делать это просто работает при компиляции классов.Скорость
Предустановленные-env: «Usbuiltins»: «Использование»
Babel-Preset-Env
ввел идею компиляции синтаксиса на разные цели. Он также представил, через UseBuiltins
Опция, способность добавлять только полифилки, которые целевые показатели не поддерживают.import "babel-polyfill";
import "core-js/modules/es7.string.pad-start";
import "core-js/modules/es7.string.pad-end";
// ...
Padstart
или Poadend
ОтказPadstart
Если он даже не используется в коде?«Usbuiltins»: «Использование»
Наша первая попытка решать эту идею. Он выполняет импорт в верхней части каждого файла, но добавляет только импорт, если он найдет его в коде. Этот подход означает, что мы можем импортировать минимальное количество полифиллирования, необходимых для приложения (и только в том случае, если целевая среда не поддерживает ее).Обещание
В вашем коде он импортирует его в верхней части файла (если ваша цель не поддерживает ее). БУнд-файл отдает файл, если оно то же самое, поэтому этот подход не приведет к импортированию нескольких полифинов.import "core-js/modules/es6.promise";
var a = new Promise();
import "core-js/modules/es7.array.includes";
[].includes
a.includes
.includes
для массива или нет. Наличие ложного положительного положиния в порядке, пока эта логика лучше, поскольку оно все еще лучше, чем импортировать весь полифилл, как раньше.Разное обновления
Модули-Commonjs
плагин через # 6952.envname: «Что-то»
в .babelrc или пройти через cli Бабел
Вместо того, чтобы использовать Process.env.babel_env
или Process.env.node_env.
[«Преобразование для», {"приведено": true}]
сделать все для выхода петлей в качестве обычных массивовПреобразование-тип-символ
В свободном режиме для предустановки-env # 6831.До dos до выпуска
Спасибо