我尝试在 nodejs 中使用 es 模块,但它的错误回溯似乎没有显示错误发生的位置?
// copy and rename to `a.cjs` and `a.mjs`
console.log("hi")
throw "err"
node --trace-uncaught a.cjs
node --trace-uncaught a.mjs
通用JS
[kkocdko@fedora kblog]$ node --trace-uncaught a.cjs
hi
/home/kkocdko/misc/code/kblog/a.cjs:2
throw "err"
^
err
Thrown at:
at /home/kkocdko/misc/code/kblog/a.cjs:2:1
at Module._compile (node:internal/modules/cjs/loader:1103:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1155:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Module._load (node:internal/modules/cjs/loader:822:12)
at executeUserEntryPoint (node:internal/modules/run_main:77:12)
at node:internal/main/run_main_module:17:47
ES模块
[kkocdko@fedora kblog]$ node --trace-uncaught a.mjs
hi
node:internal/process/esm_loader:94
internalBinding('errors').triggerUncaughtException(
^
err
Thrown at:
at loadESM (node:internal/process/esm_loader:94:31)
CommonJS版本报错位置,ES Module没有。这导致调试困难。如何在 nodejs es 模块上显示有用的错误回溯?
最佳答案
抛出 Error
填充堆栈,抛出 String
则不会。
throw new Error('err')
$ node a.mjs
file:///so73742023/a.mjs:7
throw new Error('err')
^
Error: err
at file:///so73742023/a.mjs:7:7
at ModuleJob.run (node:internal/modules/esm/module_job:193:25)
at async Promise.all (index 0)
at async ESMLoader.import (node:internal/modules/esm/loader:528:24)
at async loadESM (node:internal/process/esm_loader:91:5)
at async handleMainPromise (node:internal/modules/run_main:65:12)
不要扔字符串。
关于javascript - 如何在 nodejs es 模块上显示有用的错误回溯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73742023/