簡體   English   中英

babel 插件語法在哪里定義?

[英]Where is babel plugin syntax defined?

我正在構建一個 babel 插件,並且可以在 Babel repo 中找到許多已經編寫好的插件示例。

我找不到用於編寫這樣一個插件的權威 API 文檔——尤其是對於我可以在生成的 AST 上執行的操作。

我檢查過

簡單列舉幾個地方。 它們甚至都沒有定義我在現有插件中經常看到的無處不在的.get方法,更不用說我可以在路徑、節點、scope 或綁定上調用的其他函數了。

Babel 7 轉換是否存在明確的文檔來源? 如果是這樣,它在哪里?

我不是“通天塔”專家,但幾個小時后,我發現了這一點。 沒有關於 API 的文檔,而不是實際的源代碼。

例如,我決定使用這個名為babel-plugin-transform-spread 的插件 隨着我們進一步打開這些鏈接 go。

第一站是AST Spec 在上面插件的源代碼中,我看到了一些CallExpression ,可以在規范中輕松找到。 根據規范,這個類型有幾個屬性(例如被調用者和參數) 我也可以在源代碼中看到它們的清晰用法。 在這一點上沒有什么特別的。

但是您可能想問:好的,但是方法呢?

讓我們以ArrayExpression為例。 規范中沒有方法。 但是在源代碼中,有很多,比如.replaceWith() 這到底是從哪里來的? 我找到了這個API 文檔 很老,是的,但仍然有幫助 IMO。 嘗試在此頁面上查找replaceWith ,您會看到一些提示,例如babel-core.traverse.NodePath.prototype.replaceWith

好的,接下來就是打開babel 的 GitHub 頁面,在babel/packages/babel-traverse中找到關於replaceWith的內容。 這將我們引向這條線 在這里你可以看到其他相關的方法。

作為練習,您可以打開babel 手冊並嘗試查找其他內容。 例如getPrevSibling 再次,打開 GitHub,打開搜索,查看結果, 這里是 go findParentinsertAfter等。

這種方法不是最簡單的方法,但是如果沒有適當的文檔,這是我們必須處理的。 很遺憾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM