node—启用不输出函数名的源映射



我正在node.js中尝试文章Source maps中的新实验节点标志--enable-source-maps,虽然它输出了正确的行号,但似乎没有输出函数名。

给定以下内容:

package.json

{
"name": "node-sourcemaps",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"source-map-support": "^0.5.19",
"webpack": "^4.44.2",
"webpack-cli": "^3.3.12"
}
}

index.js

const functionA = () => {
functionB()
}
const functionB = () => {
functionC()
}
const functionC = () => {
functionD()
}
const functionD = () => {
throw new Error('Roh Ruh')
}
functionA()

生成传输输出和源映射:

> npx webpack ./index.js --devtool source-map --target node --mode production

然后使用节点和标志执行它:

❯ node --enable-source-maps .distmain.js
Error: Roh Ruh
at o (D:spikesnode-sourcemaps-spikedistmain.js:1:970)
-> D:spikesnode-sourcemaps-spikedistwebpack:index.js:14:9
at n (D:spikesnode-sourcemaps-spikedistmain.js:1:952)
-> D:spikesnode-sourcemaps-spikedistwebpack:index.js:10:3
at r (D:spikesnode-sourcemaps-spikedistmain.js:1:940)
-> D:spikesnode-sourcemaps-spikedistwebpack:index.js:6:3
at Object.<anonymous> (D:spikesnode-sourcemaps-spikedistmain.js:1:992)   
-> D:spikesnode-sourcemaps-spikedistwebpack:index.js:2:3
at r (D:spikesnode-sourcemaps-spikedistmain.js:1:110)
-> D:spikesnode-sourcemaps-spikedistwebpack:webpackbootstrap:19:22 
at D:spikesnode-sourcemaps-spikedistmain.js:1:902
-> D:spikesnode-sourcemaps-spikedistwebpack:webpackbootstrap:83:10 
at Object.<anonymous> (D:spikesnode-sourcemaps-spikedistmain.js:1:911)   
at Module._compile (internal/modules/cjs/loader.js:956:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
at Module.load (internal/modules/cjs/loader.js:812:32)

您可以看到行号是正确的,但是函数名称是模糊的。

如果我重复相同的操作,但使用source-map-support

require('source-map-support').install()
const functionA = () => {
functionB()
}
const functionB = () => {
functionC()
}
const functionC = () => {
functionD()
}
const functionD = () => {
throw new Error('Roh Ruh')
}
functionA()

使用节点执行,但不使用标志:

❯ node .distmain.js
D:spikesnode-sourcemaps-spikedistwebpack:index.js:16
throw new Error('Roh Ruh')
^
Error: Roh Ruh
at functionD (D:spikesnode-sourcemaps-spikedistwebpack:index.js:16:9)   
at functionC (D:spikesnode-sourcemaps-spikedistwebpack:index.js:12:3)   
at functionB (D:spikesnode-sourcemaps-spikedistwebpack:index.js:8:3)    
at Object.call (D:spikesnode-sourcemaps-spikedistwebpack:index.js:4:3)  
at __webpack_require__ (D:spikesnode-sourcemaps-spikedistwebpack:webpackbootstrap:19:22)
at D:spikesnode-sourcemaps-spikedistwebpack:webpackbootstrap:83:10     
at Object.<anonymous> (D:spikesnode-sourcemaps-spikedistmain.js:1:911)   
at Module._compile (internal/modules/cjs/loader.js:956:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)     
at Module.load (internal/modules/cjs/loader.js:812:32)

您可以看到正确的行号和函数名称。

这是节点源映射支持的限制还是我误解了?

在源代码映射支持的文档中,您有两个选项:

CLI用法

// edited to match your example
node -r source-map-support/register dist/main.js

编程使用

要使用这种方式,只需将这一行放在文件的顶部

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

其中任何一个都可以。我相信这个包更多的是--enable-source-maps标志的替代品,您不需要将它们一起使用

最新更新