[英]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 成功导入initializeApp和getFirestore 。
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.