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只包含一个导出行?为了创建一个最小的示例,最好去掉不相关的代码,在最小的状态下进行测试,然后显示结果。换言之:你能产生的最小数量的代码是多少?