【问题标题】:can I make a Cloud Function that only for local Firebase Emulators?我可以制作一个仅适用于本地 Firebase 模拟器的云功能吗?
【发布时间】:2021-04-28 20:27:52
【问题描述】:

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

我把这段代码写在我的index.ts

exports.onlyForFirebaseSimulator = functions.https.onRequest(async (req, res) => {
  
  
});

我想在运行 firebase emulators:start 时使此功能可用,但在运行 firebase deploy 时它不会部署到生产环境中。

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

【问题讨论】:

    标签: node.js google-cloud-functions firebase-tools


    【解决方案1】:

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

    firebase deploy --only functions:addMessage,functions:makeUppercase
    

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

    【讨论】:

      【解决方案2】:

      我想我找到了答案。

      我在我的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;
      
      猜你喜欢
      • 1970-01-01
      • 2019-11-10
      • 2021-03-11
      • 1970-01-01
      • 2021-05-11
      • 2019-07-08
      • 2019-11-18
      • 1970-01-01
      • 2021-02-26
      相关资源
      最近更新 更多