2017-04-26 3 views
2

코드 파일에 최상위 레벨 인 선언, 즉 Program 노드 바로 아래에있는 모든 선언을 조작해야하는 바벨 플러그인을 작성하고 있습니다.Babel plugin : 주어진 노드의 경로를 얻는 방법?

Babel Plugin Handbook은 'Do not traverse when manual lookup will do'이라고 말하면서 간단히 자식 노드를 반복 할 수 있다고 설명합니다. 그건 잘 작동합니다. 내 문제는 replaceWith, insertBefore, insertAfter 등 모든 조작 함수가 경로에 정의되어 있고 노드가 아닌에 정의되어 있습니다. 그래서 자식 노드를 반복 할 때 어떻게 조작 할 수 있습니까?

주어진 노드에서 경로 객체를 가져 오는 방법이 필요합니다. 하지만 나는 그 반대의 경우에만 문서를 찾을 수 있습니다 : 경로 객체 (path.node)에서 노드를 가져 오는 것.

답변

2

노드가 AST의 위치를 ​​알지 못하기 때문에 노드에서 경로를 가져올 수 없습니다. 그 부분을 만들려고

점은 path.get("foo")을 할 수있는 때

Program(path) { 
    path.get("body").forEach((child) => { 
    // "child" here is a NodePath 
    }); 
}, 
+0

을 할 수 Program에 대한 있도록, path.traverse를 호출하지 않도록해야 내가 뭔가를 놓친해야합니다 알고 있다는 것입니다! 고맙습니다! –

관련 문제