为babel 6编写语法插件

时间:2016-05-31 19:39:51

标签: javascript plugins ecmascript-6 babeljs

我最近向es-discuss发布了一条关于我已有的想法的提案。现在我想尝试写一个可以做到这一点的babel插件。

简短版本,我想做/支持这个:

import { x, y, z } as myLib from 'lib';

我想我需要改变 - 或覆盖偶数 - babel-types for es2015

我没有找到很多关于babel的defineType工作的文档或有用的帖子,或者当前ImportDeclaration实现的工作方式。

有人可以指点一下babel-type系统是如何工作的,特别是关于ImportDeclaration

This repository似乎正在构建一个babel语法插件,但使用不同的方法(通过babylon插件)。这是这样做的吗?

看到所有babel自己的语法插件只是空壳,可以在其他地方切换某些行为,这有点令人困惑:babel-plugin-syntax-class-properties/src/index.js

巴贝尔和巴比伦是惊人的,我要向那些正在实现它的人们致以诚挚的谢意!

1 个答案:

答案 0 :(得分:2)

不幸的是,Babel / Babylon目前不支持任意自定义语法扩展,并且我们目前还没有对PR尚未达到阶段0的非官方语法扩展感兴趣。我们确实希望支持那一天,但是一旦你到达许多插件正在运行的点,这种方式实际上可以很好地协同工作,这一点并不明显。

该插件使用非官方API,直接访问babylonhttps://github.com/mbrowne/babel-dci/blob/a766680b060ab1aa9601c4c14c5b1e0d514ec314/babel-plugin-syntax-dci/src/babylonPlugin.js#L6

import { types as tt } from "babylon/lib/tokenizer/types";
import Parser from "babylon/lib/parser";

lib文件夹不公开,不受支持。这也是为什么这个插件已经固定在一个特定的和过时的巴比伦版本的原因:https://github.com/mbrowne/babel-dci/blob/master/babel-plugin-syntax-dci/package.json#L11