首页 > 解决方案 > node - 如何在 nyc 和 mocha 中使用 source-map

问题描述

所以 nyc 正在修改我的文件,如下所示:

  at _onCreate (src/post/admin.js:1:10453)
  at doQuery (src/db.js:59:216)
  at process._tickCallback (internal/process/next_tick.js:68:7)

我不确定如何使用源地图来解决这个问题。文档状态:

使用源映射的准确堆栈跟踪。

当 producer-source-map 设置为 true 时,检测的源文件将包含用于检测器转换的内联源映射。当与 source-map-support 结合使用时,检测代码的堆栈跟踪将反映其原始行。

所以我尝试了以下 npm run 命令:

"NODE_ENV=test nyc mocha --require ./tests/setup.js --require source-map-support/register --produce-source-map true --bail ./tests/unit/$FILE"

结合 nyc 设置:

"nyc": {
    "include": [
        "src"
    ],
    "exclude": [
        "./tmp/**/*",
        "./tests"
    ],
    "instrument": true,
    "report-dir": "./tests/coverage",
    "temp-dir": "./tests/temp",
    "source-map": true,
    "produce-source-map": true
}

但这条线仍然被破坏了。

标签: javascriptnode.jsmocha.jsistanbulnyc

解决方案


它工作的基本前提条件是(如此所述):

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

确保nyc^10.3.210.3.0被打破)。

"devDependencies": {
    ...
    "mocha": "^3.3.0",
    "nyc": "^10.3.2",
    "source-map-support": "^0.4.15",
}

nyc配置应该是"sourceMap": true, "produce-source-map": true.

并且文档解释了如何使用它们:

命令行使用

node -r source-map-support/register compiled.js

程序化使用

将以下行放在编译文件的顶部。

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

还可以通过添加注释来定义映射文件名:

//# sourceMappingURL=filename.js.map

推荐阅读