javascript - Firebase 模块在 Svelte 中导致“registerComponent”错误
问题描述
在我的苗条项目中,有一个firebase.js
管理 firebase 服务的文件。该文件如下所示:
import firebase from "firebase/app"; // rollup bundle issue with ESM import
import "firebase/firestore";
import "firebase/auth";
const firebaseConfig = {
// firebase config
};
console.log(firebase);
firebase.initializeApp(firebaseConfig);
export const auth = firebase.auth();
export const googleProvider = new firebase.auth.GoogleAuthProvider();
export const db = firebase.firestore();
这工作得很好,但是添加 firebase 模块似乎会导致问题。例如import "firebase/analytics";
在firebase auth之后添加一个错误出现在浏览器控制台中
index.esm.js:1301 Uncaught TypeError: Cannot read property 'registerComponent' of undefined
at registerInstallations (index.esm.js:1301)
at index.esm.js:1325
at main.js:6
有问题的文件index.esm.js
是@firebase/installations
文件,似乎传入的对象registerInstallations(firebase)
不是 firebase app 对象,而是一个包含 2 个 firebase app 对象的对象,一个 nameddefault
一个 named firebase
。
我发现解决此问题的唯一方法是在整个 node_modules 中的多个位置替换对registerInstallations(firebase)
with的调用registerInstallations(firebase.firebase)
,这似乎不是一个好的解决方案。
编辑:我设法通过重建整个项目来解决这个问题,包括汇总配置和 package.json。纵观 git 更改,没有任何差异会影响这一点。
解决方案
URL 托管不是最好的方法。可以让 firebase 捆绑工作。
它需要稍微修改rollup.config.js
文件。将以下代码添加到汇总配置插件数组为我解决了这个问题。Resolve 导入自@rollup/plugin-node-resolve
resolve({
browser: true,
dedupe: (importee) =>
importee === "svelte" || importee.startsWith("svelte/"),
mainFields: ["main", "module"],
}),
我在这里的全栈模板中有一个可用的工作版本。只需克隆存储库并仅使用该./frontend
文件夹。确保在./frontend/src/services/firebase.js
文件中添加您的 Firebase Web 应用配置。
推荐阅读
- c# - 为什么 xmlDocument Load 会抛出超时错误?
- java - 如何确保方法上存在@Scheduled 注释
- twitter-bootstrap - 引导日期时间选择器不工作,也不能正确显示
- python - BucketIterator 抛出 'Field' 对象没有属性 'vocab'
- php - 无法在 1and1 托管中使用 PHP 会话
- swift - Xcode 编译器错误未在编辑器中突出显示
- intellij-idea - Ktor - 从插件抛出错误快速启动新项目
- python - 如何在 python 中更改 .ttf-Font 字符之间的间距?
- python - 尝试在 python 中使用 smtp 模块使用 Google 服务器向自己发送电子邮件时出现 WinError 10061
- python-3.x - Python 3.7.3 ./configure --with-openssl 找不到 ssl.h