为了账号安全,请及时绑定邮箱和手机立即绑定

Firebase 函数部署失败并需要外部代码

Firebase 函数部署失败并需要外部代码

慕运维8079593 2023-08-05 20:47:02
我正在尝试重用现有的 Express 应用程序,并将其基本上移植到 firebase 功能。我有一个这样的项目结构:/  functions/    index.js    package.json  src/    app/      index.js  index.js/src/app/index.jsconst express = require('express')const cors = require('cors')const app = express()app.use(cors({  origin: 'http://localhost:5000',}))app.get('/health', (req, res) => {  res.status(200).send('Health OK')})module.exports = app/functions/index.jsconst functions = require('firebase-functions');const admin = require('firebase-admin')const app = require('../src/app')admin.initializeApp()exports.app = functions.https.onRequest(app)使用时整个设置运行良好firebase emulators:start。我可以调用这些函数,一切正常。但是,当我收到以下错误消息时,我无法部署这些功能:函数加载用户代码失败。错误消息:错误:请检查您的函数日志以查看错误原因: https: //cloud.google.com/functions/docs/monitoring/logging#viewing_logs。其他故障排除文档可以在https://cloud.google.com/functions/docs/troubleshooting#logging中找到函数部署有以下函数错误:app当我在 Firebase 控制台中查看日志时,我无法查明确切的问题:{"@type":"type.googleapis.com/google.cloud.audit.AuditLog","status":{"code":3,"message":"加载用户代码时函数失败。错误消息:错误:请检查您的函数日志以查看错误原因: https: //cloud.google.com/functions/docs/monitoring/logging#viewing_logs。可以在https://cloud.google.com/functions/找到其他故障排除文档docs/troubleshooting#logging"},"authenticationInfo":{"principalEmail":"xxx@gmail.com"},"serviceName":"cloudfunctions.googleapis.com","methodName":"google.cloud.functions.v1 .CloudFunctionsService.UpdateFunction","resourceName":"projects/xxxx/locations/us-central1/functions/app"}但是,当我从文件中删除这一行时/functions/index.js:const app = require('../src/app')基本上把代码放进去就/src/app/index.js可以了。使用不同文件夹中的代码似乎有问题?也许我错过了文档中的某些内容,但是我是否必须指定它应该包含哪些目录?我在in目录中有express依赖项。corspackage.json/functions/
查看完整描述

2 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

我最终尝试了两种不同的方法:

1. 创建一个指向我的应用程序的符号链接 ✅

在我的functions/目录中,我创建了一个指向我的应用程序的符号链接: ln -s ../src ./src然后functions/index.js像这样更改了路径const app = require('../src/app') → const app = require('./src/app')

我能够通过模拟器套件对此进行测试,并且该函数也成功部署,并且我能够调用已部署的函数。

2.从我的应用程序创建本地模块❌

这种方法没有奏效。我修改了package.jsonin/functions目录,以便包含我的主要应用程序:

"dependencies: {

  ...

  "app": "file://.."

  ...

}

然后/functions/index.js像这样改变const app = require('../src/app') → const app = require('app')。但这并不能解决问题,因为 Firebase 仅上传functions/目录,不会上传我的应用程序。


我想一种方法是实际创建我的应用程序的已发布模块,然后 Firebase 会安装它。我没有这样做,因为我真的不想发布我的应用程序。但这是一种方式。


查看完整回答
反对 回复 2023-08-05
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

当 Firebase CLI 部署您的代码时,它仅使用“functions”文件夹中的文件。除此之外它不会部署任何东西。您的“src”文件夹位于外部,因此不会部署它。

您需要将“src/app/index.js”移动到函数文件夹内的某个位置,并更改您的require指向它。或者,您需要以某种方式创建一个模块,当它不在本地运行时,您的 package.json 可以找到该模块。


查看完整回答
反对 回复 2023-08-05
  • 2 回答
  • 0 关注
  • 65 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信