从VS Code集成终端我运行firebase serve --only functions,hosting
然后在调试选项卡中我创建了默认的launch.json:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${file}"
}
]
}
我想调试服务器端(functions / index.js)而不是客户端。
我已经尝试了https://code.visualstudio.com/docs/nodejs/nodejs-debugging的一些配置而没有运气。
如何在VS代码中调试Firebase功能?
答案 0 :(得分:4)
您无法在不首先定义Firebase配置变量的情况下调试Firebase功能。 Firebase CLI为您完成。
要进行调试,您可以尝试使用与Firebase功能单元测试相同的技巧。
在致电admin.initializeApp(functions.config().firebase)
:
admin.initializeApp = function () {}
functions.config = function() {
return {
firebase: {
databaseURL: 'https://not-a-project.firebaseio.com',
storageBucket: 'not-a-project.appspot.com',
}
};
}
您现在可以使用与任何其他Google云功能相同的方式调试Firebase功能:
安装云功能模拟器:
npm install -g @google-cloud/functions-emulator
启动模拟器:
functions start
部署您的功能:
functions deploy helloWorldFunction --trigger-http
您将获得如下输出:
Waiting for operation to finish...done.
Deploying function........done.
Function helloWorldFunction deployed.
Property | Value
---------|------------------------------------------------------------------------
Name | helloWorldFunction
Trigger | HTTP
Resource | http://localhost:8010/helloWorldProject/us-central1/helloWorldFunction
使用标准Node.js调试器类型进行调试:
functions debug helloWorldFunction
你会得到:
Debugger for helloWorldFunction listening on port 5858.
现在将以下行添加到launch.json VS Code
{
"version": "0.2.0",
"configurations": [
{
"name": "Node.JS (local)",
"type": "node",
"request": "attach",
"port": 5858
}
]
}
在您的VS代码中开始调试,并通过调用您已执行步骤#3的URL来触发您的功能。
您也可以在终端输入functions call helloWorldFunction
来触发此功能。
有关详细信息,请参阅此处Cloud Functions Local Emulator中的说明。
答案 1 :(得分:2)
更新:2019年12月19日
现在可以调试( 放置断点 )在VSCode上本地运行的firebase函数。
1)将firebase-tools更新为至少 v7.11.0 npm i -g firebase-tools
2)将以下内容添加到launch.json
:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach",
"port": 9229,
"restart": true,
"skipFiles": ["<node_internals>/**"]
}
]
}
3)运行仿真器:firebase emulators:start --inspect-functions
4)使用attach
选项运行vscode调试器。
注意:如果要从本地Firebase托管设置测试功能,则需要将托管功能指向本地服务器而不是云服务器。参见此处https://stackoverflow.com/a/59381328/3073272
关于使用终端调试(无断点)firebase功能的旧答案:
有一个Testing functions interactively使用shell的firebase文档。您还可以测试https可调用函数。尽管这里没有提到附加调试器的步骤。
1)打开Google Cloud Console的“服务帐户”窗格。
2)确保选择了App Engine默认服务帐户,然后使用右侧的选项菜单选择创建密钥。
3)出现提示时,选择JSON作为密钥类型,然后单击“创建”。
4)将您的Google默认凭据设置为指向已下载的密钥
$ set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
$ firebase functions:shell
Cloud Functions Shell通过交互式Shell模拟所有类型的功能触发器,以使用测试数据调用功能。选项因功能类型而异,但基本用法格式为:
myFunctionName(data, options)
答案 2 :(得分:1)
npm install -g @ google-cloud / functions-emulator
/functions/index.js
const admin = require('firebase-admin');
if (!admin.apps.length)
admin.initializeApp({
apiKey: "... your api key",
authDomain: "... your auth domain",
databaseURL: "... your database url",
projectId: "... your project id",
storageBucket: "... your storage bucket",
messagingSenderId: "... your messaging sender id"
});
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach Firebase",
"port": 9229,
"preLaunchTask": "Google Cloud Emulator"
}
]
}
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Start",
"type": "shell",
"command": "functions",
"isBackground": true,
"args": [
"start"
],
"group": "build"
},
{
"label": "Deploy",
"type": "shell",
"command": "functions",
"isBackground": true,
"options": {
"cwd": "${workspaceFolder}/functions/"
},
"args": [
"deploy",
"--trigger-http",
"--timeout",
"600s",
"api"
],
"dependsOn": [
"Start"
],
"group": "build"
},
{
"label": "Inspect",
"type": "shell",
"command": "functions",
"isBackground": true,
"options": {
"cwd": "${workspaceFolder}/functions/"
},
"args": [
"inspect",
"api"
],
"dependsOn": [
"Deploy"
],
"group": "build"
},
{
"label": "Google Cloud Emulator",
"dependsOn": [
"Inspect",
],
"group": "build"
},
]
}
答案 3 :(得分:0)
我刚刚在另一个问题上使用Firebase Functions v1.0回复了这个问题: Debugging firebase cloud functions
您可以使用Firebase函数1.0使其在Visual Studio代码上运行,而无需更改功能代码上的任何内容。
在运行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
之后,您只需使用functions debug FUNCTION_NAME
来启动该功能并附加您的vs Code调试器。
答案 4 :(得分:0)
找到了。
NeighbourhoodOther.TimeCreated
JSONObject obj = neighOtherObject.getJSONObject("time_created");
NeighbourhoodOther.TimeCreated temp = new NeighbourhoodOther.TimeCreated()
temp.timezone = obj.getString("timezone");
... fill in NeighbourhoodOther.TimeCreated members
答案 5 :(得分:0)
这是我的解决方法:
我在{root} /src/koios/index.js中有一个http Google Cloud Function
{root} /src/koios/package.json
"scripts": {
"start": "env URL=xxx.xxx.com node --inspect-brk=9229 node_modules/@google-cloud/functions-framework --target=queryElasticsearch --port=8888"
}
{root} /。vscode / launch.json
{
"type": "node",
"request": "launch",
"name": "Launch koios via npm",
"cwd": "${workspaceFolder}/src/koios",
"runtimeExecutable": "npm",
"runtimeArgs": ["run-script", "start"],
"port": 9229
}
开始在vscode中调试,然后通过邮递员发帖触发它,您可以在vscode中的Cloud Function代码中找到断点。
享受编码!