微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以制作一个仅适用于本地 Firebase 模拟器的云函数吗?

如何解决我可以制作一个仅适用于本地 Firebase 模拟器的云函数吗?

我需要创建一个仅用于 Firebase 模拟器的函数。我需要对我的 Firestore 模拟器执行一些操作,以使用虚拟数据填充 Firestore 模拟器。

我在我的 index.ts

中编写了此代码
exports.onlyForFirebaseSimulator = functions.https.onRequest(async (req,res) => {
  
  
});

我想让这个函数在我运行 firebase emulators:start 时可用,但当我运行 firebase deploy 时它不会部署到生产中。

我必须在部署前手动将其注释掉。我不想手动设置它,因为它很容易出错。

解决方法

如果您使用 Firebase CLI deploy command 进行部署,则可以通过指定 --only 标志(如 docs 的相关部分所述)来仅选择要部署到生产的函数:例如如果您有三个名为 addMessage、makeUppercase 和 onlyForFirebaseSimulator 的函数运行以下命令:

total_price

不会将您的 onlyForFirebaseSimulator 部署到生产环境中。

,

我想我找到了答案。

我在 index.ts 中使用 group functions 来组织多个函数,我建议您先阅读它,否则您阅读我的 index.ts 会感到困惑。我使用的是 Typescript/ES6,但概念是一样的

对于“正常”部署,在 index.ts 中会是这样

// Firestore triggers
export * as users from "./firestore/triggers/users/users_triggers";
export * as users_attendedEvents from "./firestore/triggers/users/attendedEvents/attended_events_triggers";
export * as users_followers from "./firestore/triggers/users/followers/followers_triggers";

// Firebase Authentication triggers
export * as auth from "./firebase_authentication/triggers/firebase_auth_triggers";

现在我想添加不会在生产中部署的函数(当我运行 firebase deploy 时)但在模拟器运行时可用(当我运行 firebase emulators:start 时)

要检测模拟器是否正在运行,我们可以检查它的环境变量,process.env.FUNCTIONS_EMULATOR 将为真。 check this answer 了解更多信息

所以我完整的index.ts会是这样

// Firestore triggers
export * as users from "./firestore/triggers/users/users_triggers";
export * as users_attendedEvents from "./firestore/triggers/users/attendedEvents/attended_events_triggers";
export * as users_followers from "./firestore/triggers/users/followers/followers_triggers";
    
// Firebase Authentication triggers
export * as auth from "./firebase_authentication/triggers/firebase_auth_triggers";

// The code below will be exported only if emulators are running,to avoid deployment to production server
const isRunningOnEmulator = (process.env.FUNCTIONS_EMULATOR && process.env.FIRESTORE_EMULATOR_HOST);
import * as emulator_functions from "./utilities/emulators/http_triggers/for_testing_via_firestore_emulators";
export const forEmulator = isRunningOnEmulator ? emulator_functions : undefined;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。