[英]How can I get async stack traces with Node and TypeScript?
I wish I could get stack traces to work in TypeScript.我希望我可以在 TypeScript 中获得堆栈跟踪。 I only seem to see the bottommost function name.
我似乎只看到最底层的函数名称。 I'm using Node.js v12.4.0 on Windows 10 (1803).
我在 Windows 10 (1803) 上使用 Node.js v12.4.0。
This is the code:这是代码:
async function thrower() {
throw new Error("test");
}
async function level1() {
return await thrower();
}
async function level2() {
return await level1();
}
async function level3() {
return await level2();
}
async function main() {
try {
await level3();
} catch(err) {
console.warn("main error", err);
}
}
console.log("node version", process.version);
main().then(() => {
console.log("all done " + __filename);
}).catch((err) => {
console.error("Something went wrong in here :(", __filename, err);
})
The resulting stack trace that does not mention level1
or level2
or level3
:生成的堆栈跟踪未提及
level1
或level2
或level3
:
ts-node test-stack.ts
node version v12.4.0
main error Error: test
at D:\dev\server\test-stack.ts:2:9
at step (D:\dev\server\test-stack.ts:31:23)
at Object.next (D:\dev\server\test-stack.ts:12:53)
at D:\dev\server\test-stack.ts:6:71
at new Promise (<anonymous>)
at __awaiter (D:\dev\server\test-stack.ts:2:12)
at thrower (D:\dev\server\test-stack.ts:37:12)
at D:\dev\server\test-stack.ts:6:16
at step (D:\dev\server\test-stack.ts:31:23)
at Object.next (D:\dev\server\test-stack.ts:12:53)
all done D:\dev\server\test-stack.ts
After some research and noticing the __awaiter
, I decided to inspect what's TypeScript targeting.经过一些研究并注意到
__awaiter
,我决定检查什么是 TypeScript 目标。 That was my problem.那是我的问题。
Here's my bad tsconfig.json
:这是我不好的
tsconfig.json
:
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"downlevelIteration": true,
},
"include": [
"server/**/*", "tests"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
And this "target": "es2018"
fixed it:而这个
"target": "es2018"
修复了它:
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"downlevelIteration": true,
"target": "es2018"
},
"include": [
"server/**/*", "tests"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
Resulting in this stack trace:导致此堆栈跟踪:
ts-node test-stack.ts
node version v12.4.0
main error Error: test
at thrower (D:\dev\server\test-stack.ts:2:9)
at level1 (D:\dev\server\test-stack.ts:6:16)
at level2 (D:\dev\server\test-stack.ts:10:16)
at level3 (D:\dev\server\test-stack.ts:14:16)
at main (D:\dev\server\test-stack.ts:19:11)
at Object.<anonymous> (D:\dev\server\test-stack.ts:27:1)
at Module._compile (internal/modules/cjs/loader.js:774:30)
at Module.m._compile (C:\Users\yuv\AppData\Roaming\npm\node_modules\ts-node\src\index.ts:439:23)
at Module._extensions..js (internal/modules/cjs/loader.js:785:10)
at Object.require.extensions.<computed> [as .ts] (C:\Users\yuv\AppData\Roaming\npm\node_modules\ts-node\src\index.ts:442:12)
all done D:\dev\server\test-stack.ts
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.