首页 > 解决方案 > 类型错误:firebase.default.initializeApp 不是函数

问题描述

我正在为我的网络项目使用 firebase。特别是在服务器端。我遵循了官方文档。

https://firebase.google.com/docs/web/setup?authuser=0#node.js-apps 它曾经说过,

// Firebase App (the core Firebase SDK) is always required and
// must be listed before other Firebase SDKs
import * as firebase from "firebase/app";

// Add the Firebase services that you want to use
import "firebase/auth";
import "firebase/firestore";

// TODO: Replace the following with your app's Firebase project configuration
var firebaseConfig = {
  // ...
};

// Initialize Firebase
firebase.initializeApp(firebaseConfig);

但它不起作用。所以我只是尝试随机搜索这个。

只有它有效。

import firebase from "@firebase/app"

import "@firebase/auth"
import "@firebase/firestore"

...

firebase.default.initializeApp(firebaseConfig)

我的环境是这样的。

➜  firestore-test node --version
v14.7.0
➜  firestore-test firebase --version
8.6.0
➜  firestore-test npm --version
6.14.7

为什么官方介绍不起作用?我假设文档是旧的,它发生在 Node 14+ 版本。

那正确吗?

标签: node.jsfirebase

解决方案


我也有同样的挫败感,但根据版本 8.0.0 中的发布说明https://firebase.google.com/support/release-notes/js - 2020 年 10 月 26 日

重大更改:package.json 文件中的浏览器字段现在指向 ESM 包而不是 CJS 包。使用 ESM 导入的用户现在必须使用默认导入而不是命名空间导入。

8.0.0 之前

import * as firebase from 'firebase/app'

8.0.0 之后

import firebase from 'firebase/app'

使用 require('firebase/app') 或 require('firebase') 的代码仍然可以工作,但为了获得正确的类型(例如代码完成),用户应该将这些 require 调用更改为 require('firebase/app ').default 或 require('firebase').default。这是因为 SDK 现在为 ESM 包使用类型,并且不同的包共享一个类型文件。


推荐阅读