无法在Node.js中导入firebase-admin

问题描述

我有一台Node(14.3.0)服务器,通过添加以下行在我的package.json中启用了ES6模块导入:

package.json:

"type": "module",

根据此处的firebase-admin文档:https://firebase.google.com/docs/admin/setup/#node.js

如果您使用的是ES2015,则可以导入模块:

从“ firebase-admin”以管理员身份导入*;

使用import * as admin from 'firebase-admin';时出现以下错误

凭据:admin.credential.applicationDefault(),
TypeError:无法读取未定义的属性“ applicationDefault”

似乎firebase-admin的导入不正确-我尝试删除package.json中的"type": "module"行,并使用require导入firebase-admin:

const admin = require(firebase-admin)

它有效,所以我的问题是-是否可以使用ES6在节点中导入firebase-admin,如果可以,怎么办?

下面是一个完整的,最小的复制品:

server.js

import express from 'express';
import * as admin from 'firebase-admin';

const app = express();
const PORT = process.env.PORT || 5000;

app.use(express.json());

admin.initializeApp({
  credential: admin.credential.applicationDefault(),databaseURL: process.env.FIREBASE_DB_URL,});

app.listen(PORT,() => console.log(`listening on ${PORT}`));

export default app;

package.json

{
  "name": "server","version": "1.0.0","main": "index.js","license": "MIT","dependencies": {
    "express": "^4.17.1","firebase-admin": "^9.2.0",},"type": "module","scripts": {
    "dev": "node server.js"
  },"engines": {
    "node": "14.x"
  }
}

注意:在运行服务器之前,请确保在您的Shell(Mac / Linux)中执行此操作:

export GOOGLE_APPLICATION_CREDENTIALS="/your/path/to/service-account-file.json"

解决方法

我在firebase-admin-node github上问了这个问题。显然,他们尚未对Node 14进行导入测试。答案很简单:

import admin from 'firebase-admin'

您可以在此处查看说明:

https://github.com/firebase/firebase-admin-node/issues/1061#event-3868300300

,

像这样使用它:

$table->bigInteger('country_id')->unsigned()->nullable();
$table->foreign('country_id')->references('id') 
          ->on('users')->onDelete('cascade');
$table->bigInteger('city_id')->unsigned()->nullable();
$table->foreign('city_id')->references('id') 
          ->on('users')->onDelete('cascade');
$table->string('autreh')->nullable();
$table->bigInteger('state_id')->unsigned()->nullable();
$table->foreign('state_id')->references('id') 
          ->on('users')->onDelete('cascade');

这样,您将可以使用这些功能。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...