如何在 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 中参考打字稿源打印堆栈跟踪的主要内容,如果未能解决你的问题,请参考以下文章