无法部署“ pubsub”云功能

时间:2020-10-16 04:59:53

标签: typescript firebase google-cloud-functions google-cloud-pubsub

我正在尝试部署一个pubsub函数来运行我的Firestore数据库的预定备份,但是它将无法部署,并且我无法弄清楚为什么它不起作用。

这是最小的打字稿文件,具有可再现此行为的功能:

import * as functions from "firebase-functions";
import * as key from "../key.json";

export const backupFirestore = functions.pubsub
  .schedule("0 22 * * *")
  .timeZone("America/Los_Angeles")
  .onRun(async (context) => {
    const pk = key.private_key;
    console.log(pk);
  });

在我的index.ts文件中,按如下所示导出函数:

export { backupFirestore } from "./firestore_backup";

最后,这是我的firebase.json:

{
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint",
      "npm --prefix \"$RESOURCE_DIR\" run build"
    ],
    "source": "functions"
  }
}

我执行firebase deploy --only "functions:backupFirestore",一切看起来都很好,打字稿皮棉和编译器运行没有错误。但是部署过程会引发以下错误:

功能:指定了以下过滤器,但与项目中的任何功能都不匹配:backupFirestore

我还尝试运行firebase deploy --only functions,这不会导致错误,但仍无法部署该功能。

这正是我对所有其他功能所做的工作,但是对于pubsub函数,它却以某种方式失败。这个问题使我震惊,找不到任何现有的解决方案。

任何建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

通过查看lib文件夹,我发现了问题。编译器正在将.js.map文件写入lib/src文件夹而不是lib文件夹中-因此,firebase部署过程没有选择它。

进一步研究(并创建了一个重现此问题的最小代码示例-感谢@DougStevenson),我找到了罪魁祸首。从另一个目录导入外部文件:

import * as key from "../key.json";

我确实为编译器指定了--outDir,但是应该添加--rootDir选项才能解决此问题。参见:https://github.com/microsoft/TypeScript/issues/16683

我选择通过用import代替require命令来解决此问题,尽管这不是首选的打字稿方式。 以下是更新后的代码,这些代码将输出文件生成到lib中并成功部署到firebase:

import * as functions from "firebase-functions";
const key = require("../key.json");

export const backupFirestore = functions.pubsub
  .schedule("0 22 * * *")
  .timeZone("America/Los_Angeles")
  .onRun(async (context) => {
    const pk = key.private_key;
    console.log(pk);
  });

希望这对遇到这种行为的其他人很有帮助。