我想在每个函数定义之前添加一个语句,例如
function a() {
var b = function c() {};
}
变为
foo(function a() {
var b = foo(function c() {});
});
我正试图通过以下访问者与babel实现这一目标:
var findFunctionVisitor = {
Function: function (path) {
// Traversing further leads to infinite loop as same node is found again
path.stop();
var node = path.node;
// Move every FunctionDeclaration to FunctionExpression
var newNode = t.functionExpression(
node.id,
node.params,
node.body,
node.generator,
node.async
);
path.replaceWith(
t.CallExpression(instrumentationCall, [newNode])
)
// traverse the part in newNode.body
}
};
如果我没有停止路径,则会再次发现新插入的FunctionExpression导致无限递归,因此需要停止。
我的确切问题是,我不知道如何开始遍历newNode.body
,我需要获取内部函数语句。
答案 0 :(得分:0)
这可以通过使用babel-traverse模块完成,如下所示:
traverse(newNode, findFunctionVisitor, path.scope, path);
第三个参数是范围,第四个参数是父路径。