我想在我的巴别塔插件中做两个替换。第二个替换应该只在第一个完成后发生。
module.exports = function(babel) {
const t = babel.types;
return {
visitor: {
FunctionExpression: function(path) {
//Conversion to arrow functions
path.replaceWith(t.arrowFunctionExpression(path.node.params, path.node.body, false));
},
ThisExpression: function(path) {
//Converting all this expressions to identifiers so that it won't get translated differently
path.replaceWith(t.identifier("this"));
}
}
};
}
在我的“FunctionExpression”的AST树中,“ThisExpression”位于树的某个位置。我希望第一次转换只在第二次转换完成后发生。我如何实现这一点?
2条答案
按热度按时间vuktfyat1#
我想出来了。了解如何编写巴别塔插件的最佳地方。Here
编写另一个访问者对象,用于在“FunctionExpression”访问者中遍历。)
hvvq6cgz2#
这里有一些有用的链接来编写自定义巴别塔访问者插件。
https://babeljs.io/docs/en/babel-types
https://github.com/jamiebuilds/babel-handbook/blob/master/translations/en/plugin-handbook.md
https://babeljs.io/docs/en/babel-standalone
如果要在节点js中执行此操作,则需要安装
@babel-core
下面是一些示例代码: