如何检查esm模块的导入顺序?

问题描述

我们可以猴子修补esm加载器以向我们提供有关哪个模块在哪个时间点从哪个文件加载的信息吗? 有没有可以看的依赖树?

据我所知,ES6 +模块首先以递归方式解决导入问题,然后运行代码

main.ts

console.log("0")
import "./foo.js"
console.log("1");
import "./bar.js"

foo.ts

console.log("foo");

bar.ts

console.log("bar");
import "./baz.js"

baz.ts

console.log("baz");

输出

foo
baz
bar
0
1

上下文: 将项目从Commonjs转换为ESNEXT后,由于不同的加载程序导入代码的方式不同,代码的执行顺序变得一团糟。 目前,我尝试将Winston记录器添加到它的全局容器中,但是访问发生在初始化之前。我不知道为什么在初始化代码之前就解决了这个模块。

如何确定为什么“ permissionManipulation.ts”文件在我的“ initializeDependencies.ts”模块之前得到评估,即使导入顺序另有规定? 调试器的堆栈跟踪实际上没有任何帮助

enter image description here

编辑:根据此帖子下的评论https://stackoverflow.com/a/35552247/3244464,导入顺序取决于实现,因此不应依赖于导入顺序。并不是真正解决我的问题的方法,但至少是一个起点。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)