Где определяется синтаксис плагина babel?
Я создаю плагин Babel и могу найти множество примеров уже написанных плагинов в репозитории Babel.
Что я не могу найти, так это исчерпывающую документацию по API для написания такого плагина, особенно для операций, которые я могу выполнять с полученным AST.
я проверил
- сам babel (который также связан с ASTExplorer README
- Документация по желудю
- Погуглил "API преобразования Бабеля"
- Вавилонский справочник
- Mozilla Parser API, а также ESTree API, связанные в ней
Просто перечислю несколько мест. Ни один из них даже не дал определения повсеместного.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
, так далее.
Этот способ не самый простой, но без надлежащей документации нам приходится иметь дело с этим. К сожалению.