NodeJS 导入文件的节点ESM跟踪

kxeu7u2r  于 2023-05-22  发布在  Node.js
关注(0)|答案(1)|浏览(124)

考虑:

// foo.mjs
import './bar.mjs';
// bar.mjs
throw new Error('bar failed');

运行node foo.mjs得到:

file:///.../bar.mjs:1
throw new Error('bar failed');
      ^

Error: bar failed
    at file:///.../bar.mjs:1:7
    at ModuleJob.run (node:internal/modules/esm/module_job:198:25)
    at async Promise.all (index 0)
    at async ESMLoader.import (node:internal/modules/esm/loader:385:24)
    at async loadESM (node:internal/process/esm_loader:88:5)
    at async handleMainPromise (node:internal/modules/run_main:61:12)

请注意,堆栈跟踪没有在任何地方提到foo。这是没有帮助的,特别是如果错误是关于如何以及何时导入bar的。例如,它可能是一个单例,你错误地从importrequire加载它,从而创建了一个副本,或者它可能需要先在全局上设置其他东西,而你加载它的顺序错误。
如果出现这样的错误,如何跟踪模块是从哪里导入的?
我现在用的是Node 16。节点18产生较短但类似缺乏的堆叠:

Error: bar failed
    at file:///.../bar.mjs:1:7
    at ModuleJob.run (node:internal/modules/esm/module_job:194:25)
stszievb

stszievb1#

您可以通过使用NODE_DEBUG=esm运行您的进程来跟踪模块加载器-输出很多,但很有用。

相关问题