node/nodemon 中是否有对 typescript 的源映射支持?

问题描述 投票:0回答:7

我有一个用 typescript@2 编写的节点项目。

我的 tsconfig 将

sourceMap
设置为
true
并生成
*.map.js
文件。当我通过
*.js
node
执行转译的
nodemon
JavaScript 文件时,我只能看到与
js
文件相关的错误消息,而不是与映射的打字稿文件相关的错误消息;我认为它完全被忽略了。

sourceMap
支持仅用于浏览器支持吗?或者我可以将它与node或nodemon一起使用吗?如果是后者,我该如何启用它?

我想查看从执行的 javascript 文件相对于原始打字稿文件检测到的运行时错误。

javascript node.js typescript nodemon
7个回答
42
投票

🚩 对于 v12.12 以来的 Node 版本,有一个更简单、更好的解决方案

我最近在我的 Express 应用程序中得到了这个工作。步骤如下:

安装所需的库:

npm install --save-dev source-map-support

在您的入口点(例如

app.ts
):

require('source-map-support').install();

在您的

app.ts
中,您可能还需要更好地记录承诺中的错误:

process.on('unhandledRejection', console.log);

在您的

tsconfig
compilerOptions
下:

"inlineSourceMap": true


32
投票

此处的答案对于 v12.12.0 之前的 Node 版本是正确的,它添加了(实验性)

--enable-source-maps
标志。启用该功能后,源映射将应用于堆栈跟踪,而无需额外的依赖项。如本文中所示,它的行为略有不同,但可能有益,包括生成的 .js 文件位置和源文件位置。例如:

Error: not found
    at Object.<anonymous> (/Users/bencoe/oss/source-map-testing/test.js:29:7)
        -> /Users/bencoe/oss/source-map-testing/test.ts:13:7

20
投票

安装源地图支持:

npm install source-map-support

(我也在生产环境中运行,因为它非常有助于从发生错误时的日志中查找错误。我没有遇到很大的性能影响,但您的体验可能会有所不同。)

添加到您的

tsconfig.json

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

运行 JavaScript 文件时,添加 require 参数:

nodemon -r source-map-support/register dist/pathToJson.js

node -r source-map-support/register dist/pathToJson.js

或者,您可以在入场调用中添加:

require('source-map-support').install()

但我发现具有多个入口点的项目很乏味。


旁注:mocha还支持

--require
/
-r
选项,因此要在mocha中获得源映射支持,您还可以用它调用您的测试,例如类似于:

NODE_ENV=test npx mocha --forbid-only --require source-map-support/register --exit --recursive ./path/to/your/tests/

17
投票

我发现这个 npm 模块似乎可以解决问题:

https://github.com/evanw/node-source-map-support

在节点项目的根目录运行

npm install source-map-support --save
并将
import 'source-map-support/register'
添加到 main.ts 或 index.ts 文件中。

就是这样。


7
投票

对于 v12.12.0 以后的 Node 版本,在运行节点时使用 --enable-source-maps 标志。

示例:node --enable-source-maps main.js

请勿为 v12.12.0 及以上的 Node 版本安装“source-map-support”


6
投票

源映射支持与节点完美配合

您所需要做的就是添加

"source-map-support": "0.4.11",
通过运行

dependencies
dev-dependencies
中的
package.json

npm install --save source-map-support

在你的入口点 ts 文件中,只需在顶部添加

require('source-map-support').install()

(注意:这是调用nodeJS

require
- 不需要源映射支持定义文件)


0
投票

如果您使用的是节点(16.20.2)nyc(15.1.0)和摩卡(8.1.3),这对我有用。

错误堆栈将我指向第 4 行:

解决方案

npm install --save-dev source-map-support

.nycrc.json

{
  "include": "src/main",  
  "all": true
}

package.json

  "scripts": {    
    "test": "NODE_OPTIONS=--enable-source-maps nyc --reporter=html --reporter=json-summary mocha 'src/test/node/**/*.test.js' --exit"
  }

结果错误显示确切的第 45 行和额外信息

© www.soinside.com 2019 - 2024. All rights reserved.