为Babel 6编写语法插件

3

我最近在 es-discuss上发布了一个提议,关于我想要的一个想法。现在我想尝试编写一个Babel插件来实现这个想法。

简单来说,我想做/支持这个:

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

我认为我需要更改,甚至覆盖 es2015的babel-types

我没有找到关于babel的defineType如何工作或当前的ImportDeclaration实现工作方式的文档或有帮助的帖子。

有人可以给我关于babel-types系统如何工作的指针,特别是与ImportDeclaration相关的吗?

此存储库似乎正在构建一个babel语法插件,但使用不同的方法(通过babylon插件)。这是正确的方法吗?

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

Babel 和 babylon 非常棒,我想向那些使其成为可能的人致以最大的感谢!

1个回答

2
很遗憾,Babel/Babylon目前不支持任意自定义语法扩展,并且我们目前不感兴趣接受未经官方认证的语法扩展的PR,这些扩展还没有达到0级阶段。我们希望有一天能够支持这种扩展,但是当许多插件同时运行时,如何以一种实际有效的方式进行处理并不明显。
该插件正在使用非官方API,直接进入babylon:https://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”文件夹不是公共文件夹,也不受支持。这也是为什么该插件固定在特定且过时的Babylon版本上的原因:https://github.com/mbrowne/babel-dci/blob/master/babel-plugin-syntax-dci/package.json#L11

我是babel-dci插件的作者,希望找到一种升级它的方法,使其能够与最新版本的Babel兼容(而且我扩展Bablyon的方式一开始就不理想),但目前似乎唯一的方法是fork Babel。无论如何,我只是想在这里发布一下,以防您知道有关未来支持自定义语法插件的任何消息。 - Matt Browne
很遗憾,这不是我期望我们能够在短时间内支持的事情。如果您有更多问题,请随时加入我们的Slack频道。SO并不适合进行对话交流。 - loganfsmyth
如何添加自定义语法,例如Flow/JSX? - Matt
它们是现有的社区标准,因此它们被包含在解析器包中。 - loganfsmyth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接