Игра Яндекс Практикума
Игра Яндекс Практикума
Игра Яндекс Практикума

Почему стоит использовать Babel в разработке. Инструкция по написанию Babel плагина

Babel — это компилятор JavaScript, преобразующий код в старые версии ECMAScript. Рассказываем, в чём его суть и пишем свой простой плагин.

4К открытий5К показов

Какую проблему решает Babel

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

1. Писать в legacy стиле, не пользуясь новыми фишками;

2. Писать в новом стиле, и код будет работать только на новых версиях движков;

3. Самый оптимальный вариант — писать код в современном стиле и транспилировать его с помощью Babel в более старые версии ECMAScript, чтобы его могли исполнять даже старые браузерные движки. В общем, Babel — это единый инструмент для того, чтобы ваш код поддерживался даже старыми браузерами.

Как работает Babel под капотом

Чтобы разобраться в том, что написал разработчик, и перевести это в более старую версию JS, Babel требуется максимально декомпозировать код. Делает он это с помощью составления AST дерева и его последующего анализа. Babel разбивает наш код на самые мелкие частицы, даже «‎;»‎ или «‎пробел»‎ — отдельная часть AST дерева. После того как Babel создал такое дерево, он может пройтись по каждому узлу и преобразовать его нужным образом.

Особая сила Babel

Особая сила Babel заключается в огромном количестве разнообразных плагинов, а самое главное — плагин можно написать самому. Плагины имеют доступ к абстрактному синтаксическому дереву AST и могут изменять его на этапе транспиляции кода перед выходом в итоговый бандл. Babel плагины работают по паттерну Visitor. Суть паттерна в том, что если у нас есть некая абстракция (в нашем случае это AST), мы не взаимодействуем с ней напрямую, а работаем с ней через посетителя, то есть Visitor. Наша абстракция будет иметь метод, задача которого простая – просто передать себя посетителю, а он уже будет работать с ним.

Пишем свой Babel плагин

Я напишу простой плагин в учебных целях, который будет менять все операторы «+»‎ на «-»‎. Он бесполезный, но на его примере можно понять, как пишутся плагины в целом.

Суть простая.

1. Вы смотрите в AST Explorer, как выглядят определённые ноды в абстрактном синтаксическом дереве;

2. Обрабатываете эти ноды в коде так, как вы хотите.

Почему стоит использовать Babel в разработке. Инструкция по написанию Babel плагина 1

Я написал код в AST Explorer, после установки курсора на значок «+» увидел, что мне нужен BinaryExpression, и написал вот такой вот плагин, опираясь на паттерн Visitor:

Почему стоит использовать Babel в разработке. Инструкция по написанию Babel плагина 2

Вот так подключил его:

В итоге мой код скомпилировался и на выходе в сближенном файле я получил вот такой консоль лог, где видно, что наш плагин работает и меняет «+»‎ на «-».

Почему стоит использовать Babel в разработке. Инструкция по написанию Babel плагина 3

Исходный код можно найти: https://github.com/dacorm/test-babel-plugin

На примере этого простого плагина вы ознакомились с ещё одним нетривиальным способом решения некоторых проблем в коде. Иногда на работе случаются такие баги, что решать их приходится с помощью Babel плагина. Это буквально суперсила, которой владеют немногие.

Следите за новыми постами
Следите за новыми постами по любимым темам
4К открытий5К показов