Firebase serve --only functions VS local emulator 在本地运行云功能?

Posted

技术标签:

【中文标题】Firebase serve --only functions VS local emulator 在本地运行云功能?【英文标题】:Firebase serve --only functions VS local emulator to run cloud functions locally? 【发布时间】:2019-10-30 07:18:25 【问题描述】:

到目前为止,我一直在执行以下操作以在开发过程中在本地使用和测试我的功能:

我让它在一个终端中运行:

firebase serve --only functions

我在初始化 Firebase 应用程序时将其添加到客户端代码中:

const config = 
  apiKey: process.env.FIREBASE_APP_API_KEY,
  authDomain: process.env.FIREBASE_APP_AUTH_DOMAIN,
  databaseURL: process.env.FIREBASE_APP_DATABASE_URL,
  projectId: process.env.FIREBASE_APP_PROJECT_ID,
  storageBucket: process.env.FIREBASE_APP_STORAGE_BUCKET,
  messagingSenderId: process.env.FIREBASE_APP_MESSAGING_SENDER_ID
;

firebase.initializeApp(config);

// THIS IS THE DEFAULT HOST AND PORT USED BY 'firebase serve command'
firebase.functions().useFunctionsEmulator('http://localhost:5000');

我只测试了 HTTP 可调用函数,到目前为止一切正常。


但在文档中,我看到了:

https://firebase.google.com/docs/functions/local-emulator

在本地运行函数 Firebase CLI 包含一个 Cloud Functions 模拟器,可以模拟以下函数类型:

HTTPS 功能 可调用函数 Cloud Firestore 函数

您可以在本地运行函数以在部署到生产之前对其进行测试。

1.安装 Firebase CLI - Link

2。设置管理员凭据(可选) - Link

$ set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
$ firebase emulators:start

完成这些步骤后,您的函数测试可以使用 Admin SDK 访问 Firebase 和 Google API。例如,在测试身份验证触发器时,模拟函数可以调用 admin.auth().getUserByEmail(email)。

问题

这两种本地运行函数的方法有什么区别?

【问题讨论】:

【参考方案1】:

firebase emulators:start 是新 Firebase 模拟器套件的一部分,该套件旨在让多个模拟产品协同工作。它与firebase serve --only functions 完全不同,它基于@google-cloud/functions-emulator npm package,它没有被积极维护(点击你会看到它已被弃用)。建议您开始迁移到新的模拟器套件并远离firebase serve

【讨论】:

谢谢!那么firebase deployfirebase servefirebase serve --only hosting 等其他标志呢?我们还能使用它们吗?除了firebase serve --only functions 之外,还有其他什么被弃用了吗? 您可能需要查看 firebase-tools repo 上的发行说明。 我们注意到,对于一个简单的函数,serve 的速度(600ms)大约是emulate(1200ms)的两倍。是预期的吗?为什么? @ShaunLuttin 如果您对模拟器有任何疑问,请将您的问题发布到其 GitHub。 github.com/firebase/firebase-tools 发现这个问题很有帮助,但仍然不清楚如何在本地开发过程中将 Emulator Suite 与 React 一起使用,而无需将我的项目构建到静态文件中,因此我写了这篇关于如何在没有建筑:medium.com/@samshapiro/…

以上是关于Firebase serve --only functions VS local emulator 在本地运行云功能?的主要内容,如果未能解决你的问题,请参考以下文章

firebase deploy --only 函数上出现 NPM 错误的原因是啥

相同的 Flutter Web 构建使用 `dhttp` 在本地运行,但使用 `firebase serve` 或 `firebase deploy` 失败

设置“firebase javascript”以与“ionic serve”一起使用

Groovy闭包 Closure ( 闭包的 delegate 代理策略 | OWNER_FIRST | DELEGATE_FIRST | OWNER_ONLY | DELEGATE_ONLY )

firebase deploy --only hosting 给出错误:HTTP 错误:410,未知错误

如何在 Firebase 中附加到带有其他对象的路径?