首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法导出firebase-admin的initializeApp功能

无法导出firebase-admin的initializeApp功能
EN

Stack Overflow用户
提问于 2021-02-18 12:44:21
回答 1查看 1.2K关注 0票数 0

为了抽象firebase-admin依赖项,我有一个文件index.js,用于导出我的项目使用的功能。为什么不能将initializeApp导出为属性?

例如:

index.js

代码语言:javascript
复制
const firebaseAdmin = require('firebase-admin');

exports.initializeApp = firebaseAdmin.initializeApp;

consumer.js

代码语言:javascript
复制
const firebaseAdmin = require('path/to/index.js');

firebaseAdmin.initializeApp();

引发以下错误:

TypeError:无法读取未定义的属性“initializeApp”

为了隔离这个问题,我编写了以下代码,以证明initializeApp不能像对其他函数一样导出为属性:

代码语言:javascript
复制
const firebaseAdmin = require('firebase-admin');

const initializeApp = firebaseAdmin.initializeApp;

initializeApp();

这会抛出:

TypeError:无法读取未定义属性的“内部”

为什么我不能将initializeApp导出为属性?此错误迫使我将index.js中的导出重写为:

代码语言:javascript
复制
exports.initializeApp = () => firebaseAdmin.initializeApp();

但这感觉像一次黑客袭击。

我的每个文件都是以'use strict;'开头的,这有什么区别吗?那将是令人惊讶的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-19 02:14:18

这是Admin如何实现的结果。Admin包的主要导出不是真正的模块,而是类的实例。因此,当您从该类实例中提取单个方法时,它会松开它的所有上下文,并且内部引用(如this )开始出现故障。这里有一个简单的例子来说明这个问题。

代码语言:javascript
复制
// file: sdk.ts
class Firebase {
  public INSTANCE = {key: 'sdk'};

  public initializeApp() {
    console.log('Initializing', this.INSTANCE['key']);
  }
}

const admin = new Firebase();
export = admin;
代码语言:javascript
复制
# 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的未来版本中得到解决,但现在它不受支持。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66260225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档