无法导出 firebase-admin 的 initializeApp 函数
Cannot export firebase-admin's initializeApp function
为了抽象 firebase-admin
依赖项,我有一个文件 index.js
用于导出我的项目使用的功能。为什么无法将 initializeApp
导出为 属性?
例如:
index.js
const firebaseAdmin = require('firebase-admin');
exports.initializeApp = firebaseAdmin.initializeApp;
consumer.js
const firebaseAdmin = require('path/to/index.js');
firebaseAdmin.initializeApp();
抛出以下错误:
TypeError: Cannot read property 'initializeApp' of undefined
为了隔离问题,我写了以下内容来证明 initializeApp
不能导出为 属性,就像我对其他函数所做的那样:
const firebaseAdmin = require('firebase-admin');
const initializeApp = firebaseAdmin.initializeApp;
initializeApp();
这抛出:
TypeError: Cannot read property 'INTERNAL' of undefined
为什么我不能将 initializeApp
导出为 属性?这个错误迫使我将 index.js 中的导出重写为:
exports.initializeApp = () => firebaseAdmin.initializeApp();
但这感觉像是一个 hack。
我的每个文件都以 'use strict;'
开头有什么不同吗?那将是令人惊讶的。
这是 Admin SDK 实施方式的结果。 Admin SDK包主要导出的不是真正的模块,而是一个class的实例。因此,当您从 class 实例中提取单个方法时,它会丢失所有上下文,并且 this
等内部引用开始出现故障。这里有一个简单的例子来说明这个问题。
// file: sdk.ts
class Firebase {
public INSTANCE = {key: 'sdk'};
public initializeApp() {
console.log('Initializing', this.INSTANCE['key']);
}
}
const admin = new Firebase();
export = admin;
# File: test.js
// admin actually points to an instance of the Firebase class
const admin = require('./sdk');
// extract a single method from the object instance
const initializeApp = admin.initializeApp;
// The "this" reference in the initializeApp method no longer works
initializeApp();
您将不得不继续使用您目前找到的解决方法。它可能会在 SDK 的未来版本中得到解决,但目前不受支持。
为了抽象 firebase-admin
依赖项,我有一个文件 index.js
用于导出我的项目使用的功能。为什么无法将 initializeApp
导出为 属性?
例如:
index.js
const firebaseAdmin = require('firebase-admin');
exports.initializeApp = firebaseAdmin.initializeApp;
consumer.js
const firebaseAdmin = require('path/to/index.js');
firebaseAdmin.initializeApp();
抛出以下错误:
TypeError: Cannot read property 'initializeApp' of undefined
为了隔离问题,我写了以下内容来证明 initializeApp
不能导出为 属性,就像我对其他函数所做的那样:
const firebaseAdmin = require('firebase-admin');
const initializeApp = firebaseAdmin.initializeApp;
initializeApp();
这抛出:
TypeError: Cannot read property 'INTERNAL' of undefined
为什么我不能将 initializeApp
导出为 属性?这个错误迫使我将 index.js 中的导出重写为:
exports.initializeApp = () => firebaseAdmin.initializeApp();
但这感觉像是一个 hack。
我的每个文件都以 'use strict;'
开头有什么不同吗?那将是令人惊讶的。
这是 Admin SDK 实施方式的结果。 Admin SDK包主要导出的不是真正的模块,而是一个class的实例。因此,当您从 class 实例中提取单个方法时,它会丢失所有上下文,并且 this
等内部引用开始出现故障。这里有一个简单的例子来说明这个问题。
// file: sdk.ts
class Firebase {
public INSTANCE = {key: 'sdk'};
public initializeApp() {
console.log('Initializing', this.INSTANCE['key']);
}
}
const admin = new Firebase();
export = admin;
# File: test.js
// admin actually points to an instance of the Firebase class
const admin = require('./sdk');
// extract a single method from the object instance
const initializeApp = admin.initializeApp;
// The "this" reference in the initializeApp method no longer works
initializeApp();
您将不得不继续使用您目前找到的解决方法。它可能会在 SDK 的未来版本中得到解决,但目前不受支持。