【问题标题】:Debugging firebase cloud functions调试 firebase 云函数
【发布时间】:2018-05-17 04:04:26
【问题描述】:

如何使用 Visual Studio 代码 firebase-database trigger 函数进行调试? 我尝试了模拟器,但调用时出现错误

functions debug myMethod

C:\functions\functions>functions debug createUserChat
ERROR: Error: Function myMethod in location us-central1 in project myProject does not exist
at C:\Users\Dev\AppData\Roaming\npm\node_modules\@google-cloud\functions-emulator\node_modules\grpc\src\client.js:554:15

我要调试的这段代码

require('@google-cloud/debug-agent').start({ allowExpressions: true });;

const functions = require('firebase-functions'),
        admin = require('firebase-admin'),
        logging = require('@google-cloud/logging')();
        admin.initializeApp(functions.config().firebase);

exports.myMethod= functions.database.ref('Tasks/{taskID}/taskStatus').onUpdate(event =>{
       // do sth.
});

这是我的启动文件

{
"version": "0.2.0",
"configurations": [
    {
        "name": "Debug Function",
        "type": "node",
        "request": "attach",
        "port": 5858
    }
]
}

【问题讨论】:

标签: node.js firebase visual-studio-code google-cloud-functions


【解决方案1】:

debug-agent 仅用于远程调试。如果您想在本地调试函数,请使用 Cloud Functions Emulator。

https://cloud.google.com/functions/docs/emulator

【讨论】:

  • 你的意思是在本地模拟器的情况下不起作用?我使用并能够在本地调试我的函数代码。你检查调试部分了吗?cloud.google.com/functions/docs/…
  • 是的,我确实尝试过,但正如我所提到的,它不是一个 http 请求,它是一个数据库触发器。顺便说一句,我是第一次这样做,本地模拟器如何检查数据库的更改?
  • 所以.. 是的。你检查过这个东西吗? firebase.google.com/docs/functions/local-emulator
  • 好的,谢谢您的回答。我进入了它,不幸的是我在 CLI 上遇到了一个错误:!功能:无法启动模拟器。错误:找不到模块 'C:\Users\Dev\AppData\Roaming\npm\node_modules\firebase-tools\node_modules\grpc\src\node\extension_binary\node-v48-win32-x64\grpc_node.node'
  • 缺少一些软件包。尝试使用 --save 标志将所有必需的库安装到本地文件夹中,以确保一切就绪。在其他情况下,您需要尝试重新安装丢失的软件包。
【解决方案2】:

您可以使用 Firebase 函数 1.0 使其在 Visual Studio Code 上运行,而无需更改函数代码上的任何内容。 而且您的启动配置似乎是正确的...

您基本上只需要在运行functions deploy 命令时正确设置FIREBASE_CONFIG 环境变量即可。 类似的东西(不要忘记转义 " 字符):

FIREBASE_CONFIG="{\"databaseURL\":\"https://YOUR-FIREBASE-PROJECT.firebaseio.com\",\"storageBucket\":\"YOUR-FIREBASE-PROJECT.appspot.com\",\"projectId\":\"YOUR-FIREBASE-PROJECT\"}
functions deploy --trigger-http --timeout 600s FUNCTION_NAME

这适用于 Firebase Functions 1.0,因为在新版本中,Firebase 函数会从环境中读取其配置 (https://firebase.google.com/docs/functions/beta-v1-diff#new_initialization_syntax_for_firebase_admin)

之后,您只需正常运行functions debug FUNCTION_NAME [--port] 即可启动函数调试器并运行“附加”VS Code 配置。

我为此写了一个小教程,其中包含更多细节和图片: https://medium.com/@mwebler/debugging-firebase-functions-with-vs-code-3afab528bb36

【讨论】:

  • 获取Error: FIREBASE FATAL ERROR: Cannot parse Firebase url. Please use https://<YOUR FIREBASE>.firebaseio.com
【解决方案3】:

使用firebase emulators:start --inspect-functions --only functions

文档中的更多内容:https://firebase.google.com/docs/emulator-suite/install_and_configure

使用npm ls -g --depth=0 ├── firebase-tools@9.2.2 ├── firebase@8.2.5

相关问答:https://stackoverflow.com/a/65430902/965666

以前(不再适用于上述更新版本):

试试:ndb firebase serve

这会打开带有调试工具的特定 Chrome 浏览器,并且检测所有子进程可能会有点慢,因此请稍等片刻。一旦运行,它应该会遇到调试器断点等。

【讨论】:

  • 'ndb' 不是内部或外部命令、可运行程序或批处理文件。
  • @EliaWeiss 在您的路径中安装它应该使其在您的环境中可用,有关更多信息,请参阅npmjs.com/package/ndb 的文档我提供的答案是基于我的个人经验的给定问题,设置是可通过链接文档获得,请阅读它们
  • 这对我有用,但是当我在新机器上设置项目时,我现在收到错误“Inspector 不可用”。我假设这是与较新版本的 ndb 或 firebase 函数模拟器有关的问题。
  • @KClough 我在 ndb 版本 1.0.48 之后遇到了问题,特别是使用 Firebase,所以我这样做了:npm i -g ndb@v1.0.48 错误报告中的更多详细信息——我不确定这是否适用(希望这对寻找解决方案很有用)github.com/GoogleChromeLabs/ndb/issues/269
  • @jimmont 我将我的 firebase-functions 更新到 3.3.0,它现在可以与 ndb@v1.1.5 一起使用。
【解决方案4】:

在一个简单的步骤中,我执行了以下操作,我不仅能够调试该功能,而且每次进行更改时都会自动重建: 首先创建一个这样的启动器(我想你使用 vs-code):

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "attach",
      "name": "Debug",
      "port": 9229
    }
  ]
}

然后分别运行这两个命令:

npm run build:watch

firebase emulators:start --inspect-functions

调试愉快

【讨论】:

    猜你喜欢
    • 2020-07-12
    • 2019-01-18
    • 2021-09-13
    • 2019-07-29
    • 1970-01-01
    • 2018-09-16
    • 2020-01-28
    • 2018-10-02
    • 2017-08-09
    相关资源
    最近更新 更多