我有一個專案設定,其中我有一個 Web 應用程式,該應用程式依賴于 Webpacked 并通過 Webpack 開發服務器提供的幾個 Firebase SDK。
從我可以在不涉及太多細節的情況下收集到的資訊是,最終依賴項同時具有通用索引和 es2017 索引檔案

有一些中間依賴項也有,比如應用程式和一些只有 es2017 例如訊息,還有一些只有通用索引檔案。
我遇到的問題是,我除錯了很長時間,從我的應用程式級別,當我在不同的檔案中匯入中間依賴項時,在某些情況下它需要通用索引檔案,在某些情況下它需要同一個庫的 es2017 .
因此,在此處的錯誤堆疊跟蹤中,我嘗試初始化 Firebase 的訊息傳遞服務:(暫時忽略丟失的承諾拒絕)
at Provider.getImmediate (index.cjs.js:153) // in component lib
at Module.getMessagingInWindow (index.esm2017.js:1155) // in messaging lib
at new MessagingWrapper (MessagingWrapper.js:76) // in my application
at FirebaseSession.push.56916.FirebaseSession.getMessaging (FirebaseSession.js:96)
at PushPubSubModule_Class.<anonymous> (PushPubSubModule.js:118)
at step (PushPubSubModule.js:63)
at Object.next (PushPubSubModule.js:44)
at fulfilled (PushPubSubModule.js:35)
最初加載訊息模塊時,它還會訪問組件庫并使用正確的 es2017 索引檔案,但稍后當我嘗試實際獲取訊息服務的實體時,它會轉到另一個通用索引檔案。
在所有情況下,我使用的匯入與 import {somthing} from "@firebase/messaging"
我從來沒有真正擔心過這些事情,可能會錯過一些基本的東西,但這感覺就像一個 webpack 錯誤,預先確定從嵌套庫加載哪個模塊......
你知道我可以強制 webpack 決議 es2017 索引檔案的方法嗎?或者我應該打開一個錯誤?
更多細節:
這是我的 MessagingWrapper 檔案的轉譯代碼:

第 71 行:轉到訊息庫中正確的 es2017 索引檔案和組件庫中的正確 es2017
其中第 76 行:轉到訊息中正確的 es2017 索引檔案
線: 
這里的第 1155 行:實際上轉到firebase /app lib es2017 檔案以決議提供程式,回傳第 1155 行,然后呼叫 getImmediate,它最終出現在組件庫中的通用索引檔案中,如下所示:

我該如何解決?
uj5u.com熱心網友回復:
@firebase/*包是內部的,你不應該在你的代碼中匯入它們,因為它們的每個npm 目錄串列中都有警告。正如您所遇到的,這可能會導致模塊決議問題,因為您實際上是通過直接訪問內部結構來跳過內部設定步驟。
相反,使用公共 API 介面 via firebase/*(對于 v9 上的模塊化 SDK 或遺留 SDK v8 及更低版本)和 via firebase/compat/*(對于 v9 上的遺留 SDK)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/371096.html
