通天塔获取节点的第一个child。遵循访问者模式
Babel js. Get the first child of a node. Following the visitor pattern
我需要获取 "Program" 节点的第一个 child。我正在关注访问者模式。
let out2 = babel.transform(tc1, { plugins: [
{
visitor: {
Program(path) {
console.log(path);
// path.insertBefore(decorators[d]);
}
}
}]});
请注意 decorators[d]
包含一个节点。我试图获得第一个 child 的原因是因为 insertBefore
行似乎不起作用。它抛出这个错误。
TypeError: unknown: Cannot read property 'isExpressionStatement' of null
所以我想尝试执行节点child上的行。
我尝试过的事情:
path.children[0];
和
path.node.right;
和
path.traverse({
Program(p2) {
}
})
你可以做到
path.get("body.0");
但我用得最多的是这个:
path.traverse(
{
TypeOfNode(path){ }
})
我也试过插入这个并且成功了:
path.node.body
这是一个节点数组。例如,如果你想在数组之前插入一个节点(使用 javascript unshift
函数)你会这样做:
path.node.body.unshift(node);
我需要获取 "Program" 节点的第一个 child。我正在关注访问者模式。
let out2 = babel.transform(tc1, { plugins: [
{
visitor: {
Program(path) {
console.log(path);
// path.insertBefore(decorators[d]);
}
}
}]});
请注意 decorators[d]
包含一个节点。我试图获得第一个 child 的原因是因为 insertBefore
行似乎不起作用。它抛出这个错误。
TypeError: unknown: Cannot read property 'isExpressionStatement' of null
所以我想尝试执行节点child上的行。
我尝试过的事情:
path.children[0];
和
path.node.right;
和
path.traverse({
Program(p2) {
}
})
你可以做到
path.get("body.0");
但我用得最多的是这个:
path.traverse(
{
TypeOfNode(path){ }
})
我也试过插入这个并且成功了:
path.node.body
这是一个节点数组。例如,如果你想在数组之前插入一个节点(使用 javascript unshift
函数)你会这样做:
path.node.body.unshift(node);