<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
我們在處理節點的屬性之前必須要拿到節點物件才能進行操作,我們使用path.node.property
來存取屬性~
BinaryExpression(path) { path.node.left; path.node.right; path.node.operator; }
我們還可以使用 path 內建的 get 函數來指定屬性名獲取屬性值~
BinaryExpression(path) { path.get('left'); } Program(path) { path.get('body.0'); }
檢查節點的型別我們可以使用內建的工具類函數isXxx()
~
BinaryExpression(path) { if (t.isIdentifier(path.node.left)) { // ... } }
我們在檢查型別的時候還可以順便檢查其中的某些屬性是否達到預期~
BinaryExpression(path) { if (t.isIdentifier(path.node.left, { name: "n" })) { // ... } } // 簡化前的程式碼 BinaryExpression(path) { if ( path.node.left != null && path.node.left.type === "Identifier" && path.node.left.name === "n" ) { // ... } }
路徑具有相同的方法檢查節點的型別~
BinaryExpression(path) { if (path.get('left').isIdentifier({ name: "n" })) { // ... } } // 等價於 BinaryExpression(path) { if (t.isIdentifier(path.node.left, { name: "n" })) { // ... } }
Identifier(path) { if (path.isReferencedIdentifier()) { // ... } } // 或者 Identifier(path) { if (t.isReferenced(path.node, path.parent)) { // ... } }
向上查詢特定節點可以使用~
path.findParent((path) => path.isObjectExpression());
如果也需要遍歷當前節點~
path.find((path) => path.isObjectExpression());
查詢最接近的父函數或程式~
path.getFunctionParent();
向上遍歷語法樹,直到找到在列表中的父節點路徑~
path.getStatementParent();
如果一個路徑是在一個 Function
/Program
中的列表裡面,它就有同級節點。
path.inList
來判斷路徑是否有同級節點,path.getSibling(index)
來獲得同級路徑,path.key
獲取路徑所在容器的索引,path.container
獲取路徑的容器(包含所有同級節點的陣列)path.listKey
獲取容器的key這些API用於 babel-minify 中使用的 transform-merge-sibling-variables 外掛.
var a = 1; // pathA, path.key = 0 var b = 2; // pathB, path.key = 1 var c = 3; // pathC, path.key = 2
export default function({ types: t }) { return { visitor: { VariableDeclaration(path) { // if the current path is pathA path.inList // true path.listKey // "body" path.key // 0 path.getSibling(0) // pathA path.getSibling(path.key + 1) // pathB path.container // [pathA, pathB, pathC] } } }; }
當我們遍歷完成目的後應該儘早結束而不是繼續遍歷下去~
BinaryExpression(path) { if (path.node.operator !== '**') return; }
如果您在頂級路徑中進行子遍歷,則可以使用2個提供的API方法~
path.skip()
跳過遍歷當前路徑的子路徑~
path.stop()
完全停止遍歷~
outerPath.traverse({ Function(innerPath) { innerPath.skip(); // if checking the children is irrelevant }, ReferencedIdentifier(innerPath, state) { state.iife = true; innerPath.stop(); // if you want to save some state and then stop traversal, or deopt } });
以上就是Babel 外掛開發&存取節點範例詳解的詳細內容,更多關於Babel 外掛開發存取節點的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45