短版:有沒有辦法掛鉤到Webpack的AST,使其識別新的模塊格式?
我們如何從裝載機內部操作的文件最終輸出束的AST,還有AST?在這兩種情況下,我都想操縱現有的AST,而不是我正在做的解析源代碼並製作新的AST。我所做的很慢,我知道Webpack必須已經制作了一個AST,所以我想避免重複工作。
龍版本:
例如,假設我有一堆類似的格式寫入文件(但不完全)AMD模塊:
module({
Foo: '/path/to/Foo',
Bar: '/path/to/Bar',
Baz: '/path/to/Baz',
}, function(imports) {
console.log(imports) // {Foo:..., Bar:... Baz:...}
})
所不同的是,它是調用module
而不是define
,依賴性參數是一個導入名稱到模塊路徑而不是一個模塊路徑數組的映射圖,模塊主體函數接收到一個import
對象,其中包含所有請求的導入,而不是每個請求的導入的一個參數RT。
以上是類似於AMD的格式如下,以相同的輸出:
define([
'/path/to/Foo',
'/path/to/Bar',
'/path/to/Baz',
], function(Foo, Bar, Baz) {
console.log({Foo, Bar, Baz}) // {Foo:..., Bar:... Baz:...}
})
什麼是掛接到的WebPack做出的WebPack能夠理解的文件(可以知道的推薦方法文件有什麼依賴關係),以便最終構建一個包含以這種module()
格式編寫的文件的包?
我已經嘗試了一種方法:我製作了一個自定義加載程序,它接收文件的源代碼作爲字符串,解析它並創建和AST,轉換AST,然後輸出AMD define()
格式的代碼,Webpack可以理解。
不過,我覺得這樣很慢,因爲如果有很多文件,並且它們很大,那麼從每個文件中解析和製作AST看起來都是多餘的,因爲我敢打賭,Webpack已經開始這樣做了。有什麼方法可以從Webpack獲取AST並在Webpack想要掃描它的依賴性之前將其轉換,以便我可以將AST轉換爲AMD格式(或任何可識別的格式),以便Webpack最終可以使用該文件?還有另一種方法嗎?