![](/img/trans.png)
[英]firebase-admin with typescript in firebase cloud functions
[英]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.