TypeScript开发的Firebase云函数部署后在控制台无法找到
我是TypeScript和Firebase云函数的新手,此前成功部署过helloWorld函数。这次编写了调用Secret Manager的getSecret云函数,执行firebase deploy后终端显示部署完成,但Firebase控制台里找不到该函数。
函数代码(index.ts)
import * as functions from "firebase-functions"; import {SecretManagerServiceClient} from "@google-cloud/secret-manager"; const client = new SecretManagerServiceClient(); export const getSecret = functions.region('us-central1').https.onCall(async (data, context) => { const [version] = await client.accessSecretVersion({ name: "projects/project-id/secrets/api/versions/latest", }); const secretValue = version.payload?.data ?? "No found"; console.log(secretValue); return secretValue; });
部署日志输出
i deploying functions Running command: npm --prefix "$RESOURCE_DIR" run build > build > tsc ✔ functions: Finished running predeploy script. i functions: preparing codebase default for deployment i functions: ensuring required API cloudfunctions.googleapis.com is enabled... i functions: ensuring required API cloudbuild.googleapis.com is enabled... i artifactregistry: ensuring required API artifactregistry.googleapis.com is enabled... ✔ functions: required API cloudfunctions.googleapis.com is enabled ✔ artifactregistry: required API artifactregistry.googleapis.com is enabled ✔ functions: required API cloudbuild.googleapis.com is enabled i functions: Loading and analyzing source code for codebase default to determine what to deploy Serving at port 8200 shutdown requested via /__/quitquitquit i functions: cleaning up build files... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/project-id/overview
从部署日志里的Serving at port 8200和shutdown requested via /__/quitquitquit可以看出,部署流程未正常完成,以下是具体排查方向:
检查TypeScript编译输出
确认tsconfig.json中的outDir配置是否指向Firebase期望的目录(默认是lib)。手动执行npm run build,查看是否生成了lib/index.js,且文件中包含getSecret函数的导出。如果编译输出路径错误,Firebase CLI找不到可部署的代码,控制台自然不会显示函数。核对firebase.json配置
打开项目根目录的firebase.json,确认functions的source路径正确指向你的函数源码目录,codebase配置为default(默认配置)。示例配置:{ "functions": { "source": "functions", "codebase": "default" } }终止后台firebase进程
日志中出现本地服务启动的信息,说明可能有firebase emulators:start或其他调试进程在后台运行,干扰了部署流程。关闭所有相关终端窗口,或用系统任务管理器终止firebase相关进程,再重新执行部署。强制指定部署目标
不要使用firebase deploy全量部署,而是明确指定部署该函数:firebase deploy --only functions:getSecret这样能获得更精准的部署反馈,排查是否存在隐藏报错。
验证函数导出正确性
检查index.ts中的export const getSecret是否未被注释,且编译后的lib/index.js中正确导出了该函数。部分情况下TypeScript编译警告可能导致导出丢失,可查看npm run build的完整输出确认是否有异常。
内容的提问来源于stack exchange,提问作者matti peter

