Babel v6:如何/我可以编写一个添加新语法的插件(即一个新的运算符)?

cbe*_*enz 14 javascript babeljs

注意:我在Babel问题跟踪器(https://phabricator.babeljs.io/T2653)上发现了这个问题并被拒绝了,但AFAIK的作者没有在这里问过它.

我已经检查了像package/babel-plugin-syntax-do-expressions这样的 Babel插件,看起来这些ES6 +新语法/运算符实际上并没有在插件中实际定义,而是在Babylon实现,只是通过这些来切换插件.

最新博客文章中声称"开发人员已经构建了从调试工具到实验性新语法的所有内容[...]以在其代码库上强制执行复杂规则"这一说法"可疑 - 实际上,我已经搜索了整个插件生态系统,但发现没有插件能够提供新的运营商/语法,只有一个插件能够为少数现有运营商提供运营商重载.

那么,使用Babel v6我们是否能够看到在用户空间中定义新的运算符/语法,以及如何?

这也是我有机会感谢整个Babel团队的出色工作!

PS:我开始搜索如何扩展Babylon解析器语法,以实现一个插件,它将像Julia方法一样实现"模式匹配" .

Gaj*_*jus 5

从 Babel v6.18.0 开始,parserOpts添加了允许将配置传递给解析器的选项,即传递给Babylon

Babylon 接受 options plugins,可用于指定要启用的插件名称列表。在撰写本文时,您只能参考Babylon 中内置插件之一。

有多个建议允许外部插件,例如

共识是~

过去,我们一直反对允许对巴比伦进行外部扩展的想法。支持自定义解析比支持自定义转换要困难得多。Babel 已经有很多它必须支持的东西,所以我们不想打开它。

–  https://github.com/babel/babylon/pull/5#issuecomment-195801336

要启用自定义解析,您需要:


mac*_*ost 0

babel -plugin-transform-exponentiation-operator插件添加了一个新的运算符 ( **)。看起来您应该能够从他们的代码(非常简单)开始构建您自己的不同的运算符。

  • 抱歉,我的措辞有误。关于“不是新的运算符”,我的意思是——它是 Babylon 支持的运算符,而不是插件添加的新运算符。“但是为什么”,因为 Babylon 是一个解析器,而 Babel 是一个转译器。Babel 插件是转译器。 (2认同)