如何在 Nest.js 中参考打字稿源打印堆栈跟踪

Posted

技术标签:

【中文标题】如何在 Nest.js 中参考打字稿源打印堆栈跟踪【英文标题】:How to print stack trace with reference to typescript source in Nest.js 【发布时间】:2020-03-18 21:33:43 【问题描述】:

我正在开发一个 Nest.js 服务器,并希望能够在控制台中打印有用的堆栈跟踪(例如 console.log)。默认情况下,它返回对已编译源 (.js) 中行号的引用。这对调试没有用,因为它缺少对原始源文件 (.ts) 中行号的引用

这是我的 tsconfig.json


  "compilerOptions": 
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "_baseUrl": "./",
    "incremental": true
  ,
  "exclude": ["node_modules", "dist"]

.map 文件也在 dist 文件夹中生成,尽管在控制台中检查堆栈跟踪时似乎没有用。

【问题讨论】:

您的 tsconfig 中是否启用了源映射? 是的,我已经用 tsconfig 内容更新了我的问题 所以,在我自己的服务器上进行测试后,我只得到一行ts,那是因为服务器是通过ng 编译器打包的。正如预期的那样,所有内容都在js 文件中,因为您正在运行javascript。这是默认行为,但看起来 this comment 显示了一种在堆栈跟踪中获取 ts 行的方法 谢谢!它可以工作,只需将source-map-support 添加到项目中,现在它会从ts 文件中输出行号 【参考方案1】:

出于可见性目的:添加source-map-support NPM 包允许在堆栈跟踪中跟踪打字稿文件。

可以使用node -r source-map-support/register fileToRun.js 在命令行中添加,也可以使用编程方式添加

import * as sourceMapSupport from 'source-map-support';
sourceMapSupport.install();

import  install  from 'source-map-support';
install();

或使用 ES6 模块

import 'source-map-support/register';

【讨论】:

我必须将它单独添加到每个文件中吗?或者有没有办法为我的整个 NestJS 项目在全球范围内做到这一点? 您只需将其添加到您的main.ts 或上述命令行中。 在打字稿中不要忘记npm i --save-dev @types/source-map-support

以上是关于如何在 Nest.js 中参考打字稿源打印堆栈跟踪的主要内容,如果未能解决你的问题,请参考以下文章

如何将堆栈跟踪打印到控制台/登录 Cocoa?

gulp-uglify 后打字稿源映射错误

如何在 Ruby 中获取堆栈跟踪对象?

打字稿源文件中带有 ts-jest 断点的 vscode-jest

如何在 JSP 页面中打印错误堆栈跟踪?

Nest.js RangeError:超出最大调用堆栈大小