无法部署"pubsub"云功能



我正试图部署一个pubsub函数来运行我的消防仓库数据库的定时备份,但它不会部署,我也不知道为什么它不会工作。

这是一个最小的typescript文件,它具有再现这种行为的功能:

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",一切看起来都很好,typescript lint和编译器运行时没有错误。但是部署过程会抛出以下错误:

函数:指定了以下筛选器,但与项目中的任何函数都不匹配:backupFirestore

我还尝试运行firebase deploy --only functions,但没有导致错误,但仍然没有部署该函数。

这正是我为所有其他函数所做的,但不知何故,对于pubsub函数,它失败了。这个问题让我大吃一惊,我找不到任何现有的解决方案。

任何建议都将不胜感激!

通过查看lib文件夹,我发现了这个问题。编译器将.js.map文件写入lib/src而不是lib文件夹,因此firebase部署过程没有接收到它。

经过进一步的研究(并创建了一个再现该问题的最小代码示例——感谢@DougStevenson(,我发现了罪魁祸首。从另一个目录导入外部文件:

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

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

我选择用require替换import命令来解决这个问题,尽管这不是首选的打字方式。以下是更新后的代码,它将输出文件生成到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);
});

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

相关内容

  • 没有找到相关文章