TypeError:rtdb.initStandalone 不是函数

Posted

技术标签:

【中文标题】TypeError:rtdb.initStandalone 不是函数【英文标题】:TypeError: rtdb.initStandalone is not a function 【发布时间】:2018-06-24 06:33:22 【问题描述】:

我对 Node 和 Firebase 都很陌生,但似乎无法在线找到此错误。

当我尝试通过 Firebase Admin 加载 Firebase 数据库时出现以下错误:

TypeError: rtdb.initStandalone 不是函数 DatabaseService../node_modules/firebase-admin/lib/database/database.js.DatabaseService.getDatabase node_modules/firebase-admin/lib/database/database.js:62

    var db = this.INTERNAL.databases[dbUrl];
    if (typeof db === 'undefined') 
        var rtdb = require('@firebase/database');
        db = rtdb.initStandalone(this.appInternal, dbUrl).instance;
        this.INTERNAL.databases[dbUrl] = db;
    
    return db;

节点模块版本: Firebase-Admin@5.8.0 @firebase/app@0.1.1 @firebase/database@0.1.3

【问题讨论】:

您似乎正尝试在同一程序中同时使用 Firebase Admin SDK 和 Firebase Web 客户端 SDK。这可能不是你想要的。如果您正在编写服务器代码,只需使用管理 SDK 即可,无需使用客户端 SDK。 您好,Doug,感谢您的回复。根据 package.json,firebase-admin 将 firebase-database 作为依赖项 - 我认为我没有安装 firebase Web 客户端,但不能确定......我确实尝试将 firebase 添加为核心包并更新最初尝试解决上述问题(但显然无济于事)。 我尝试从头开始重新导入项目的所有包,包括 firebase-admin、react、react-dom、react-scripts(通过 create-react-app)和 react-router,但是发生同样的错误。 不要在服务器端代码中直接使用客户端 SDK,即使您将它们视为节点模块的一部分。仅使用管理 SDK。 firebase.google.com/docs/admin/setup 我应该更好地阅读文档 - 看起来我在使用管理 SDK,而我应该一直使用 Web 客户端 SDK。 【参考方案1】:

如果有人遇到与我相同的问题:

@firebase/database/package.json:

"main": "dist/cjs/index.node.js",
"browser": "dist/cjs/index.js",
"module": "dist/esm/index.js",

initStandalone()dist/cjs/index.node.js 中,但不在dist/esm/index.js 中,因为它只用于服务器端,而不是在浏览器中。

如果你使用 webpack 来打包你的代码,即使使用target: 'node',它也会更喜欢“module”而不是“main”,并使用为浏览器准备的文件。

我的解决方案是在 webpack 配置中将 resolve.mainFields 设置为 ["main", "module"]

附言。我正在使用 webpack 准备我的代码以上传到 AWS Lambda。如果我不使用它,我必须上传整个 node_modules 文件夹,这个文件夹很大,而且经常会导致上传超时。我只需要其中 10% 的代码。如果有人知道更好的解决方案,我很想听听。

【讨论】:

感谢您分享这个!终于结束了我长达数小时的头痛! 太棒了。感谢您的回答。仍然在 2019 年度过难关 :)

以上是关于TypeError:rtdb.initStandalone 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

反应本机获取多标记[未处理的承诺拒绝:TypeError:TypeError:未定义不是对象(评估'this.state.markers.map

Django TypeError - TypeError: issubclass() arg 1 必须是一个类

pyspark:TypeError:'float'对象不可迭代

Python 3.8 TypeError: can't concat str to bytes - TypeError: a bytes-like object is required, not 's

TypeError: key 必须是一个字符串,一个缓冲区或一个对象在 typeError 与 GCP 文件存在

TypeError: jQueryxxxxxx 不是函数