繁体   English   中英

在Cloud Functions中使用Typescript时,仅从firebase-admin导入使用的位

[英]Import only used bits from firebase-admin when using Typescript in Cloud Functions

我看了一下我从云函数转译的代码,并跟随打字稿导入

import { auth, firestore } from 'firebase-admin';

被移植到

const firebase_admin_1 = require("firebase-admin");

看着它导入整个管理库,而不是我需要的位,我认为这将有助于增加冷启动时间。

我试图使用require即在我的ts代码中要求这些

const { auth, firestore } = require('firebase-admin');

但是这样做会使它的类型定义变得松散。

我想问问是否有一种方法可以只使用我需要的firebase-admin lib而不损害打字稿定义?

在使用firebase-admin情况下,文档中未提及此类内容,因为firebase-admin sdk是用于服务器端的。

但是,肯定有一个适用于firebase客户端SDK。

const firebase = require('firebase/app'); require('firebase/auth'); require('firebase/firestore');

我认为从您的问题来看,您需要客户端SDK。

当您require('firebase-admin') (或在TypeScript中导入,是同一回事)时,将什么符号导入到代码中都没有关系。 无论如何,都会发生相同的事情-将加载整个模块。 从库中导入单个符号不会改变这一事实,它只会更改代码中可用的符号。 如果您尝试通过仅选择要导入的某些符号来优化代码,那么这实际上不是JavaScript中的有效优化。 您真正能做的就是不使用不需要的SDK部分。

firebase-admin是一个整体软件包。 它只导出一个实体; admin名称空间。 因此,不可能仅导入其中的一部分。 但是,该软件包还在内部实现了一堆延迟加载的东西,以确保仅加载开发人员使用的东西。

const admin = require('firebase-admin');
// The admin namespace is now loaded. But none of the API services 
// haven't loaded yet.

admin.auth();
// This loads the Auth service code, and any dependencies it uses.

admin.firestore();
// This loads the @google-cloud/firestore package.

在Cloud Functions之类的环境中,这可确保包仅加载必要的源文件和依赖项。 因此,您应该只导入admin名称空间,并在其上调用方法,然后让SDK按需导入必要的服务/组件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM