通过 /__/quitquitquit 函数代码库请求的 Firebase 函数关闭无法成功分析。它可能有语法或运行时错误

Jac*_*ler 31 node.js firebase google-cloud-functions

我正在尝试部署我的功能。我添加了第二个并重构了第一个,现在我无法部署。我尝试绕过 CI/CD 手动部署,但仍然出现错误。这是一个 2.0 函数,我确实运行了 tsc。自从我上次部署以来,我确实重新安装了 firebase-tools 包。除了我提到的以外,与它工作时没有什么不同。

\n

以下是 的输出firebase deploy --only functions

\n
i  deploying functions\nRunning command: npm --prefix "$RESOURCE_DIR" run lint\n\n> lint\n> eslint --ext .js,.ts .\n\nRunning command: npm --prefix "$RESOURCE_DIR" run build\n\n> build\n> tsc\n\n\xe2\x9c\x94  functions: Finished running predeploy script.\ni  functions: preparing codebase default for deployment\ni  functions: ensuring required API cloudfunctions.googleapis.com is enabled...\ni  functions: ensuring required API cloudbuild.googleapis.com is enabled...\ni  artifactregistry: ensuring required API artifactregistry.googleapis.com is enabled...\n\xe2\x9c\x94  functions: required API cloudbuild.googleapis.com is enabled\n\xe2\x9c\x94  functions: required API cloudfunctions.googleapis.com is enabled\n\xe2\x9c\x94  artifactregistry: required API artifactregistry.googleapis.com is enabled\ni  functions: Loading and anaylzing source code for codebase default to determine what to deploy\nServing at port 8907\n\nshutdown requested via /__/quitquitquit\n\n\nError: Functions codebase could not be analyzed successfully. It may have a syntax or runtime error\n
Run Code Online (Sandbox Code Playgroud)\n

我的代码:

\n
/* eslint-disable max-len */\nimport "dotenv/config";\nimport { initializeApp } from "firebase-admin/app";\nimport { getFirestore } from "firebase-admin/firestore";\nimport { onDocumentCreated, onDocumentDeleted } from "firebase-functions/v2/firestore";\n\nconst accountSid = process.env.TWILIO_ACCOUNT_SID;\nconst authToken = process.env.TWILIO_AUTH_TOKEN;\nconst twilioPhoneNumber = process.env.TWILIO_PHONE_NUMBER;\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst client = require("twilio")(accountSid, authToken);\n\nexport const sendSMSOnContactWrite = onDocumentCreated("/contact/{contactSubmissionId}", async (event) => {\n  const data = event.data?.data();\n  console.log(data);\n  return await client.messages.create({\n    // eslint-disable-next-line\n    "body": `New contact submission from ${data?.name} at ${data?.email} with message: ${data?.message}. ${data?.name} said ${data?.hasWebsite} when asked if they have a website.${data?.hasWebsite === "yes" ? " Their website is at " + data?.websiteAddress : ""}`,\n    "from": twilioPhoneNumber,\n    "to": process.env.MY_PHONE_NUMBER,\n  });\n});\n\nexport const sendSMSOnContentItemDelete = onDocumentDeleted("/websites/{websiteId}/content/{contentGroupId}/data/{contentId}", async (event) => {\n  initializeApp();\n  const db = getFirestore();\n  const websiteDocRef = db.doc("websites/" + event.params.websiteId);\n  const websiteDoc = await websiteDocRef.get();\n  const websiteDocData = websiteDoc.data();\n  if (!websiteDocData) {\n    // TODO: Log error\n    return;\n  }\n  const users = websiteDocData["users"];\n  for (const userId of users) {\n    const userDocRef = db.doc("users/" + userId);\n    const userDoc = await userDocRef.get();\n    const userDocData = userDoc.data();\n    if (!userDocData) {\n      // TODO: Log error\n      return;\n    }\n    const deletionPreference = userDocData["preferences"]["deletion_sms"];\n    if (deletionPreference) {\n      const data = event.data?.data();\n      console.log(data);\n      return await client.messages.create({\n        "body": `Content item with title ${data?.title} was deleted from website ${websiteDocData["url"]}`,\n        "from": twilioPhoneNumber,\n        "to": userDocData["phone_number"],\n      });\n    } else {\n      return;\n    }\n  }\n});\n
Run Code Online (Sandbox Code Playgroud)\n

小智 12

它可能是由不同的原因引起的,要准确了解您的情况的问题是什么,请运行该--debug选项。

所以它会导致类似的结果firebase deploy --only functions --debug

然后检查消息错误之前的最后一段:无法成功分析函数代码库

希望它会有所帮助。


Tin*_*ger 9

就我而言,我必须将其移至const firestore = admin.firestore();函数内部,而不是将其移至函数外部。

  • 如何在函数内移动initializeApp()?我有大约 60 多个功能。 (4认同)

小智 1

我们找到了解决方案和原因:在部署时访问函数配置参数。

显然它们只能在运行时访问,而不能在部署时访问。将这些访问移到实际的函数代码中可以使事情再次正常进行。