I try to use es module with nodejs, but seems that it's error backtrace dosen't show where the error was thrown?
// copy and rename to `a.cjs` and `a.mjs`
console.log("hi")
throw "err"
node --trace-uncaught a.cjs
node --trace-uncaught a.mjs
[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
[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)
The CommonJS version reported the position of error, but ES Module does not. This cause debuging to be difficult. How to show useful error backtrace on nodejs es module?
Throwing an Error
populates the stack, throwing a String
does not.
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)
Don't throw strings.
Have you tried console.error
OR Error.captureStackTrace
? If these don't work for you then you could try using the node-stack-trace module, a power full module to track call stacks.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.