javascript - 如何在 nodejs es 模块上显示有用的错误回溯?

标签 javascript node.js es6-modules

我尝试在 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/

相关文章:

javascript - Node.js 计划支持导入/导出 ES6 (ECMAScript 2015) 模块

node.js - 安装 Yeoman 时遇到问题

node.js - npm 安装返回 "TypeError: Cannot convert undefined or null to object"

Webpack 与 ES6 模块

javascript - .load() 在脚本/页内脚本不起作用后加载

javascript - 使用 base64 在 HTML 上渲染图像?

javascript - 如何在不导出整个类的情况下导出静态类方法

javascript - Chai 应该是未定义的

javascript - this.property 和带冒号的 property 的区别

javascript - 如何从 "View in iTunes"这样的浏览器启动Windows应用程序?