Javascript 如何使用Node和TypeScript获取异步堆栈跟踪?

Javascript 如何使用Node和TypeScript获取异步堆栈跟踪?,javascript,node.js,typescript,asynchronous,Javascript,Node.js,Typescript,Asynchronous,我希望我能在TypeScript中使用堆栈跟踪。我似乎只看到了最底层的函数名。我在Windows10(1803)上使用Node.jsv12.4.0 代码如下: async function thrower() { throw new Error("test"); } async function level1() { return await thrower(); } async function level2() { return await level1(

我希望我能在TypeScript中使用堆栈跟踪。我似乎只看到了最底层的函数名。我在Windows10(1803)上使用Node.jsv12.4.0

代码如下:

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);
})
未提及
level1
level2
level3
的结果堆栈跟踪:

ts节点test-stack.ts
节点版本v12.4.0
主要错误:测试
位于D:\dev\server\test stack.ts:2:9
在步骤(D:\dev\server\test stack.ts:31:23)
在Object.next(D:\dev\server\test stack.ts:12:53)
位于D:\dev\server\test stack.ts:6:71
在新的承诺()
在等待者(D:\dev\server\test stack.ts:2:12)
at-thrower(D:\dev\server\test-stack.ts:37:12)
位于D:\dev\server\test stack.ts:6:16
在步骤(D:\dev\server\test stack.ts:31:23)
在Object.next(D:\dev\server\test stack.ts:12:53)
全部完成D:\dev\server\test-stack.ts

经过一些研究并注意到了
\u等待者
,我决定检查什么是TypeScript目标。那是我的问题

这是我的错误
tsconfig.json

{
    "compilerOptions": {
      "experimentalDecorators": true,
      "emitDecoratorMetadata": true,
      "downlevelIteration": true,
    },
    "include": [
        "server/**/*", "tests"
    ],
    "exclude": [
        "node_modules",
        "**/*.spec.ts"
    ]
}
而这个
“目标”:“es2018”
修复了它:

{
    "compilerOptions": {
      "experimentalDecorators": true,
      "emitDecoratorMetadata": true,
      "downlevelIteration": true,
      "target": "es2018"
    },
    "include": [
        "server/**/*", "tests"
    ],
    "exclude": [
        "node_modules",
        "**/*.spec.ts"
    ]
}
导致此堆栈跟踪:

ts节点test-stack.ts
节点版本v12.4.0
主要错误:测试
at-thrower(D:\dev\server\test-stack.ts:2:9)
在级别1(D:\dev\server\test stack.ts:6:16)
在级别2(D:\dev\server\test stack.ts:10:16)
在级别3(D:\dev\server\test stack.ts:14:16)
在main(D:\dev\server\teststack.ts:19:11)
反对。(D:\dev\server\test stack.ts:27:1)
at模块编译(内部/modules/cjs/loader.js:774:30)
在Module.m.处编译(C:\Users\yuv\AppData\Roaming\npm\node\u modules\ts node\src\index.ts:439:23)
at Module._extensions..js(internal/modules/cjs/loader.js:785:10)
在Object.require.extensions。[as.ts](C:\Users\yuv\AppData\Roaming\npm\node\u modules\ts node\src\index.ts:442:12)
全部完成D:\dev\server\test-stack.ts

如果必须针对较旧的环境,请记住使用不同的生产目标。请注意,在针对“es2017”时,我能够获得正确的堆栈跟踪。这对我的用例很重要,因为使用“es2018”目标似乎会让Webpack的简洁插件非常不满意。这或是nodejs版本16都有帮助。我正在使用ts节点。另请参见: