几天前我已经在 babel slack 频道上问过这个问题,但我一直没有得到答案。我创建了一个插件来将函数转换为 curried 函数 ( npm )。尽管我成功构建了插件,但我发现了一些解决方法,但我更愿意简化我的逻辑,从而使其更加健壮和可靠。
我的第一种方法是为FunctionDeclaration
. 这个非常简单:将每个参数展开为一个,然后用一个返回这些函数ArrowFunctionExpression
的新节点替换当前节点。FunctionDeclaration
当您要处理FunctionExpression
s 时,问题就来了。你可能知道,FunctionExpression
一个 AST 可以出现在几个地方:
- 作为变量声明的一部分
- 作为一个
AssignmentExpression
- 作为匿名函数传递给另一个函数
所有这些都是有效的 FunctionExpressions,这带来了一个问题:我正在用 functionDeclaration 替换当前节点,但似乎 babel 拒绝用functionDeclaration
. 这迫使我通过重新创建来替换整个父节点。到目前为止,这适用于包含 functionExpression 的赋值表达式和变量声明,但我必须完全重新创建它们以不破坏任何代码。当您想要支持更多场景时,这变得更加困难。
对我来说,理想的情况是只替换当前节点,而不用担心它在哪里,但正如我所说,当当前节点位于变量声明中时,babel 拒绝替换它。
代码可以在这里看到。注意:我不确定我是否也应该在这里发布代码,似乎没有必要
问候