Где определяется синтаксис плагина babel?

Я создаю плагин Babel и могу найти множество примеров уже написанных плагинов в репозитории Babel.

Что я не могу найти, так это исчерпывающую документацию по API для написания такого плагина, особенно для операций, которые я могу выполнять с полученным AST.

я проверил

Просто перечислю несколько мест. Ни один из них даже не дал определения повсеместного.get метод, который я так часто вижу в существующих плагинах, не говоря уже о других функциях, которые я могу вызывать на пути, узле, области или привязке.

Существует ли исчерпывающий источник документации по преобразованиям Babel 7? Если да, то где это?

1 ответ

Решение

Я не эксперт по "бабелам", но через несколько часов я понял это. Нет документации по API, кроме фактического исходного кода.

В качестве примера я решил использовать этот плагин под названием babel-plugin-transform-spread. Открывайте эти ссылки по мере продвижения.

Первая остановка - AST Spec. В исходном коде плагина выше я вижу некоторые CallExpression, который легко найти в спецификации. Согласно спецификации, этот Тип имеет несколько свойств (например, вызываемый объект и аргументы). И я также вижу четкое использование их в исходном коде. Ничего особенного на данный момент.

Но вы можете спросить: хорошо, а как насчет методов?

Давайте посмотрим на ArrayExpressionнапример. В спецификации нет методов. Но в исходном коде их очень много, например.replaceWith(). Откуда это, черт возьми, взялось? Я нашел этот документ API. Довольно старый, да, но все же полезный ИМО. Попытаться найтиreplaceWith на этой странице, и вы увидите несколько подсказок вроде babel-core.traverse.NodePath.prototype.replaceWith.

Хорошо, следующий шаг - открыть страницу babel на GitHub и найти что-нибудь о replaceWith вbabel/packages/babel-traverse. Это подводит нас к этой линии. И прямо здесь вы можете увидеть другие связанные методы.

В качестве упражнения вы можете открыть справочник babel и попробовать найти что-нибудь еще.getPrevSiblingнапример. И снова откройте GitHub, откройте поиск, посмотрите результаты, и поехали. Или findParent, или insertAfter, так далее.

Этот способ не самый простой, но без надлежащей документации нам приходится иметь дело с этим. К сожалению.

Другие вопросы по тегам