简体   繁体   English

无法在 HTML 中的脚本模块内初始化 Firebase APP

[英]Not able to Initialize Firebase APP inside script module in HTML

I am working on a minimal (proof of concept) project with Preact and Firebase.我正在使用 Preact 和 Firebase 进行一个最小的(概念验证)项目。

A single HTML file, bundler/transpiler free thanks to HTM as JSX replacement.单个 HTML 文件,由于HTM作为 JSX 替代品,捆绑器/转译器免费。

Here is the relevant code:这是相关代码:

            useEffect(() => {
                let isSuscribed = true
                const initFirebase = async () => {

                    let initApp = initializeApp || (await import('https://www.gstatic.com/firebasejs/9.6.10/firebase-app.js')).initializeApp
                    if (!initializeApp) {
                        setInitializeApp(initApp)
                    }


                    let getDB = getFirestore || (await import('https://www.gstatic.com/firebasejs/9.6.10/firebase-firestore.js')).getFirestore
                    if (!getFirestore) {
                        setGetFirestore(getDB)
                    }

                    const fireApp = initApp(firebaseConfig)
                    const appDB = getDB(fireApp)

                    if (isSuscribed) {
                        setFirebase(fireApp)
                        setDB(appDB)
                    }
                }
                if (firebaseConfig)
                    initFirebase()
                        .catch(e => {
                            console.log(e);
                        })

                return () => isSuscribed = false
            }, [firebaseConfig])

When firebaseConfig (JSON file) is loaded from an <input type="file"/> , it successfully imports initializeApp and getFirestore from the provided CDN.<input type="file"/>加载firebaseConfig (JSON 文件)时,它会从提供的 CDN 成功导入initializeAppgetFirestore

But no matter if I use firebaseConfig data or directly the project id it returns:但无论我是使用 firebaseConfig 数据还是直接使用它返回的项目 ID:

FirebaseError: "projectId" not provided in firebase.initializeApp.

This doesn't work either:这也不起作用:

initApp({ projectId: 'project-id' })

All is inside a <script type="module"> tag.全部都在<script type="module">标签内。

Problem solved.问题解决了。

I think the proxy variable initApp was causing the issue.我认为代理变量initApp导致了这个问题。 I changed the way initializeApp was being imported, and it did the trick.我改变了导入initializeApp的方式,它成功了。

            useEffect(() => {
                let isSuscribed = true
                const initFirebase = async () => {
                    try {
                        const [
                            { initializeApp },
                            { getFirestore, collection, addDoc }
                        ] = await Promise
                            .all([
                                import('https://www.gstatic.com/firebasejs/9.6.10/firebase-app.js'),
                                import('https://www.gstatic.com/firebasejs/9.6.10/firebase-firestore.js')
                            ])

                        const fireApp = initializeApp(firebaseConfig)
                        const appDB = getFirestore(fireApp)

                        if (isSuscribed) {
                            setFirebase(fireApp)
                            setDB(appDB)
                            setResult('success')
                        }
                    } catch (e) {
                        console.log(e);
                        setResult('error')
                    }
                }

                if (firebaseConfig) {
                    initFirebase()
                        .catch(e => {
                            console.log(e);
                        })
                }

                return () => isSuscribed = false
            }, [firebaseConfig])

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ReactNative 在应用程序启动时初始化 Firebase? - ReactNative initialize Firebase at app start? 如何在 firebase 管理员中初始化多个应用程序 - how to initialize multiple app in firebase admin 无法在 Firebase Firestore 中存储下载 URL - Not able to store download URLs inside Firebase Firestore '默认的 Firebase 应用不存在。 确保通过调用 initialize_app()' 初始化 SDK - 'The default Firebase app does not exist. Make sure to initialize the SDK by calling initialize_app()' 你应该在哪里初始化你的 firebase web 应用程序? - Where are you supposed to initialize your firebase web app? 在 HTML 文件中添加 Firebase 脚本标签 - Adding Firebase Script Tags In The HTML File 我如何使用 firebase 初始化我的应用程序 - how do i initialize my app using firebase Firebase SDK for Python:如何使用apiKey初始化App? - Firebase SDK for Python: How to initialize App using apiKey? 能够将我在本地主机中的 React 应用程序代理到 heroku 服务器,但不能代理到 firebase - Able to proxy my React app in localhost to heroku server but not on firebase 无法在我的 iOS 应用程序中看到 Firebase 分析触发? - Not able to see Firebase analytics firing in my iOS app?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM