在浏览器 + Node 中,模块的范围是什么?

In browsers + Node, what is the scope of a module?

我想知道模块在浏览器和 Node.js 中的作用域是什么。我特别想了解模块级变量是为每个应用程序创建一次还是多次。是在每次导入时创建模块的新实例,还是在所有导入中共享完全相同的模块?非常感谢!

有几种 JS 模块风格 - ESM、CommonJS、AMD。它们的共同特点是,至少在正常情况下,它们在第一次导入时被评估一次。反其道而行之会使他们无法有效地共享数据。

导出 class 实例是一种在应用程序中共享一个实例而不会使 class 成为单例的常用方法。

可以使模块被多次评估(有意或无意)的方法包括拥有多个模块副本,在 case-insensitive 系统中导入不同的文件名大小写,修改 Node 模块缓存。