无法部署“pubsub”云功能
Posted
技术标签:
【中文标题】无法部署“pubsub”云功能【英文标题】:Unable to deploy "pubsub" Cloud Function 【发布时间】:2021-01-30 14:53:21 【问题描述】:我正在尝试部署 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"
,一切看起来都很好,打字稿 lint 和编译器运行没有错误。但是部署过程抛出如下错误:
函数:指定了以下过滤器,但与项目中的任何函数都不匹配:backupFirestore
我也试过运行firebase deploy --only functions
,没有报错,但还是没有部署函数。
这正是我为所有其他函数所做的,但不知何故,对于 pubsub
函数它失败了。这个问题让我很震惊,我找不到任何现有的解决方案。
任何建议将不胜感激!
【问题讨论】:
请编辑问题以显示任何人都可以用来重现问题的complete, minimal code。不要编辑太多,以至于我们不得不猜测如何复制。 感谢@DougStevenson 的指点和道歉。我添加了完整的代码。 清理工作区中的 lib 文件夹,然后尝试重建源代码,然后在部署之前手动检查 lib 文件夹中的函数是否存在 你是说 index.ts 只包含那个导出行? 为了创建一个 minimal 示例,最好去掉不相关的代码,在最小状态下对其进行测试,然后显示结果。换句话说:你能想出的最少代码量是多少? 【参考方案1】:通过查看 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);
);
希望这对遇到这种行为的其他人有所帮助。
【讨论】:
以上是关于无法部署“pubsub”云功能的主要内容,如果未能解决你的问题,请参考以下文章