And*_*iak 6 firebase typescript google-cloud-logging google-cloud-functions
我有一组云函数,它们执行类似 CRUD 的函数来获取单个资源、列出资源等等getWidgetByURL,,,, listWidgets。deleteWidget
对于更广泛的上下文,它们被编写在单个src/service.ts文件中并src/index.ts公开一组可调用对象:
import * as functions from 'firebase-functions'
import * as service from './service'
const region = 'europe-west1'
exports.addJob = functions.region(region).https.onCall(async (data, context) => {
try {
functions.logger.debug('addJob called with data', data)
const job = await service.addJob(data.title, data.company,
data.location, data.applyUrl, data.salary, data.tags)
return job
} catch (err) {
functions.logger.error(err)
throw new functions.https.HttpsError('internal', 'internal server error', err)
}
})
Run Code Online (Sandbox Code Playgroud)
在开发周期中,我npm run build在本地运行以将 JavaScript 编译到目标lib目录中。请注意*.map文件已生成。
在生产中,如果发生运行时错误,Firebase 控制台日志中显示的堆栈跟踪仅显示 .js 文件调用堆栈。
调试过程涉及必须在本地lib/service.js文件中找到运行时错误,然后手动在相应的源代码lib/service.ts文件中找到相应的行。乏味。
堆栈跟踪是否可以自动利用 .map 文件来生成更有用的东西?如果不是,最佳实践/工作流程是什么?
我们为此使用node-source-map-support 。几分钟前我尝试过,效果很好。
假设您正在使用 NPM,请运行npm install source-map-support. (--save-dev当然不是,您在运行时需要它)。
在index.ts中,尽早导入source-map-support/register,最好是第一件事,如下所示:
// index.ts
import "source-map-support/register";
Run Code Online (Sandbox Code Playgroud)
如何编译并不重要。据我所知,调用实际上只需要在主模块中发生,并且它编译得足够早,足以让奇迹发生。
现在,测试一下!根据此 Firebase 文档,只要logger.error调用包含Error对象,我们就会获得堆栈打印输出(方便测试)。像这样记录错误,然后:
// foo.ts
import * as functions from "firebase-functions";
const { logger } = functions;
...
const error = new Error("This should log.");
logger.error(error);
Run Code Online (Sandbox Code Playgroud)
这将从foo.ts 中的第83行编译到foo.js 中的第 54行。
一旦触发,我们就会在 Firebase 函数控制台中看到:
正如您所看到的,文件名和行号正确指向.ts源文件的第 83行!
由于这与日志记录有关,因此我应该注意,因为我们在 Node.js 10 运行时上使用 Firebase Cloud Functions,所以旧console.log语法有点诡异。因此,在我们的 tsconfig.json 文件中,我们需要使用lib: ["es2018"], target: "es2018",但我们还需要使用functions.logger.*来获得与使用 时相同的行为console.*。像往常一样,扔掉任何旧Error物体也可以。
我发现这篇文章对于 Node.js 10 迁移很方便。我会将其包含在此处,以防最终与您相关。
您可以使用模块source-map-support。只需使用 npm 安装模块,然后将一行代码放在 index.js 的顶部。
require('source-map-support').install();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
921 次 |
| 最近记录: |