Typescript “无法部署”;pubsub";云函数
我正在尝试部署一个Typescript “无法部署”;pubsub";云函数,typescript,firebase,google-cloud-functions,google-cloud-pubsub,Typescript,Firebase,Google Cloud Functions,Google Cloud Pubsub,我正在尝试部署一个pubsub函数来运行firestore数据库的定时备份,但它不会部署,而且我也不明白为什么这样做行不通 下面是最小的typescript文件,该文件具有复制此行为的函数: import * as functions from "firebase-functions"; import * as key from "../key.json"; export const backupFirestore = functions.pubsub
pubsub
函数来运行firestore数据库的定时备份,但它不会部署,而且我也不明白为什么这样做行不通
下面是最小的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部署——只执行“functions:backupFirestore”
,一切看起来都很好,typescript lint和编译器运行时没有错误。但部署过程会引发以下错误:
功能:指定了以下筛选器,但与项目中的任何功能都不匹配:backupFirestore
我还尝试运行firebase deploy——仅函数
,这不会导致错误,但仍然不会部署函数
这正是我对所有其他函数所做的,但是对于pubsub
函数,它失败了。这个问题让我目瞪口呆,我找不到任何现有的解决方案
任何建议都将不胜感激 通过查看lib文件夹,我发现了这个问题。编译器正在将
.js
和.map
文件写入lib/src
而不是lib
文件夹,因此firebase部署过程没有将其拾取
经过进一步的研究(并创建了一个复制该问题的最小代码示例——谢谢@DougStevenson),我找到了罪魁祸首。从其他目录导入外部文件:
import * as key from "../key.json";
我确实为编译器指定了--outDir
,但是添加了--rootDir
选项应该可以解决这个问题。见:
我选择用require
替换import
命令来解决这个问题,尽管这不是首选的typescript方式。
以下是更新后的代码,它将输出文件生成到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);
});
希望这对其他遇到这种行为的人有所帮助。请编辑问题,以显示任何人都可以用来重现问题的答案。不要修改太多以至于我们不得不猜测如何复制。感谢DougStevenson的指针和道歉。我添加了完整的代码。清理工作区中的lib文件夹,然后尝试重建source,在部署之前,在lib文件夹中手动检查是否在那里看到您的函数,您是说index.ts只包含一个导出行?为了创建一个最小的示例,最好去掉不相关的代码,在最小的状态下进行测试,然后显示结果。换言之:你能产生的最小数量的代码是多少?