Babel v6:我如何/可以编写一个添加新语法(即新运算符)的插件
Babel v6: How/Can I write a plugin that adds a new syntax (ie a new operator)?
注意:我在Babel问题跟踪器上发现了这个问题(https://phabricator.babeljs.io/T2653)它被拒绝了,但AFAIK的作者没有在这里提出要求。
我检查了Babel插件,比如包/Babel插件语法做表达式,这些ES6+新语法/运算符似乎根本没有在插件中定义,而是在巴比伦实现的,只是由这些插件打开。
在最新的博客文章中,"开发人员已经构建了从调试工具[…]到实验性新语法[…]的一切,以在他们的代码库上执行复杂的规则",这一说法令人怀疑——事实上,我搜索了整个插件生态系统,但没有发现任何插件能够提供新的运算符/语法,并且只有一个插件能够为少数现有运算符提供运算符重载。
那么,使用Babel v6,我们真的能够看到在用户区中定义新的运算符/语法吗?
这也是我感谢巴贝尔队全体队员的良好表现的机会!
附言:我开始研究如何扩展Babylon语法分析器,以便实现一个插件,该插件将像Julia方法中那样实现"模式匹配"。
从Babel v6.18.0开始,添加了parserOpts
选项,允许将配置传递给解析器,即Babylon。
巴比伦接受选项plugins
,该选项可用于指定要启用的插件名称列表。在撰写本文时,您只能参考巴比伦内置的插件之一。
有多种建议允许外部插件,例如
- https://github.com/babel/babylon/pull/5
- https://github.com/babel/babylon/pull/11
- https://github.com/babel/babylon/issues/22
共识是~
在过去,我们一直反对允许外部扩展到巴比伦的想法。支持自定义解析要比支持自定义转换困难得多。巴贝尔已经有很多东西需要支持,所以我们不想打开这个。
–https://github.com/babel/babylon/pull/5#issuecomment-195801336
要启用自定义解析,您需要:
- 叉子巴别塔和巴比伦;或
- 使用https://github.com/sweet-js/sweet.js
不久前,我围绕Babel v6构建了一个瘦包装器,以启用"高级"插件(即添加新语法的插件):
https://github.com/lukehorvat/babby
Babby纯粹是一个实验,而不是你真正应该使用的东西。但它确实向您展示了对Babel/Bayylon进行的最低限度的更改,以支持OP正在讨论的插件类型。
babel插件的变换求幂运算符插件添加了一个新的运算符(**
)。看起来你应该能够从他们的代码开始(这很简单)来构建你自己的、不同的运算符。
在我对babel或一般编译器如何工作的简单理解中,不可能有一个babel插件来"添加新语法"。
为了做到这一点,您必须派生babel解析器,并在那里添加您的新语法。然后,您可以使用您的自定义插件来使用分叉的自定义解析器。
- jQuery语法添加了var
- 将新对象添加到本地存储
- 在Knockout中将新项添加到对象数组
- 为新对象添加函数,将对象添加到数组中.理解困难'这'关键字
- 如何将新的
- 添加到
- 使用JavaScript单击
- 添加到
- 将新行添加到localStorage变量中
- 从HTML表单中获取计算得到的JavaScript数据,并将其作为新元素添加到相同的表单操作中以使用PHP保存
- 当上一行/当前行被填充时,将新行添加到HTML表中
- Regex用于在特定条件下为新句子添加空格或句号
- 什么'在javascript中将新方法添加到对象中的区别是什么
- 当新行添加到表中时,使用AJAX更新页面
- 将新行添加到数据库时的 Javascript 警报
- 将新时区添加到时刻.js时区
- 有没有办法让 Javascript 在将新属性添加到给定对象时抛出错误
- 如何创建具有预定义值的下拉列表,但也应该有将新值添加到列表中的选项
- 将新对象添加到 chrome 本地存储
- 通过 Javascript 将新对象添加到 JSON 文件中
- 如何将新用户添加到我的用户数据库对象中
- 数据表 sDom 质询将新元素添加到表的左下角
- Babel v6:我如何/可以编写一个添加新语法(即新运算符)的插件