返回

ts-node 下错误堆栈问题排查小记

前端

ts-node 是一个命令行工具,允许将 TypeScript 代码编译为 JavaScript 代码,并能够直接运行 TypeScript 代码,而无需经过编译。这对于 Node.js 开发人员来说是一个非常有用的工具,因为它可以让他们直接使用 TypeScript 语言进行开发,而无需担心需要手动编译代码。

此前 egg 需要支持 ts,所以在 egg-bin 中集成了 ts-node ( 详见 当 Egg 遇到 TypeScript,收获茶叶蛋一枚 ),从而能够让开发者直接跑用 ts 写的 egg 应用,当然也包括单元测试。 强迫症表示这可不行啊,这必须得解决,于是开始了对源码的研究和踩坑(简述egg-bin与ts-node、typescript三者之间的关系,及其执行原理)。

最终结果还是找到了。遇到上述问题时,我们可以使用 ts-node 的 --require 选项来指定一个额外的 JavaScript 文件,该文件可以用来定义 TypeScript 代码中所依赖的模块。例如,如果我们有一个名为 my-module.ts 的 TypeScript 文件,其中使用了 require('some-module'),那么我们可以在命令行中使用以下命令来运行该文件:

ts-node --require some-module.js my-module.ts

这将告诉 ts-node 在运行 my-module.ts 之前先加载 some-module.js 文件。

另一种解决方法是在 tsconfig.json 文件中配置 sourceMap。 sourceMap 是一个包含映射信息的文件,它可以将编译后的 JavaScript 代码映射到原始的 TypeScript 代码。这将允许我们在调试器中看到原始的 TypeScript 代码,而不是编译后的 JavaScript 代码。

若使用 sourceMap,我们在 tsconfig.json 中添加以下配置:

{
  "compilerOptions": {
    "sourceMap": true
  }
}

然后,我们就可以使用以下命令来运行 TypeScript 代码:

ts-node --inspect-brk my-module.ts

这将启动一个调试器,并允许我们在调试器中看到原始的 TypeScript 代码。

以上便是关于 ts-node 中错误堆栈问题排查的一些技巧。希望这些技巧能够帮助大家解决在使用 ts-node 时遇到的问题。

结论

ts-node 是一个非常有用的工具,它可以让我们直接使用 TypeScript 语言进行开发,而无需担心需要手动编译代码。然而,在使用 ts-node 时,我们可能会遇到一些问题,例如错误堆栈问题。本文介绍了两种解决错误堆栈问题的技巧,包括使用 ts-node 的 --require 选项和在 tsconfig.json 中配置 sourceMap。希望这些技巧能够帮助大家解决在使用 ts-node 时遇到的问题。