我有一个用 typescript@2 编写的节点项目。
我的 tsconfig 将
sourceMap
设置为 true
并生成 *.map.js
文件。当我通过 *.js
或 node
执行转译的 nodemon
JavaScript 文件时,我只能看到与 js
文件相关的错误消息,而不是与映射的打字稿文件相关的错误消息;我认为它完全被忽略了。
sourceMap
支持仅用于浏览器支持吗?或者我可以将它与node或nodemon一起使用吗?如果是后者,我该如何启用它?
我想查看从执行的 javascript 文件相对于原始打字稿文件检测到的运行时错误。
🚩 对于 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
此处的答案对于 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
安装源地图支持:
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/
我发现这个 npm 模块似乎可以解决问题:
https://github.com/evanw/node-source-map-support
在节点项目的根目录运行
npm install source-map-support --save
并将 import 'source-map-support/register'
添加到 main.ts 或 index.ts 文件中。
就是这样。
对于 v12.12.0 以后的 Node 版本,在运行节点时使用 --enable-source-maps 标志。
示例:node --enable-source-maps main.js
请勿为 v12.12.0 及以上的 Node 版本安装“source-map-support”
源映射支持与节点完美配合
您所需要做的就是添加
"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
- 不需要源映射支持定义文件)
如果您使用的是节点(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 行和额外信息