使用 System.js,为什么我对一个文件中的模块所做的更改会保留在另一个文件中?

Using System.js, why do changes I make to a module in one file persist in another?

我正处于一个小型 Web 应用程序的开头,并将其设置为使用 JSPM 和 System.js 进行模块加载。我有两个文件,app.js 和 util.js。在 util.js 中,我正在创建一个函数,为我获取 Handlebars 模板,并将它们缓存在 Handlebars.templates 中。实际功能比这更多,但可以说它只是这样做

import Handlebars from 'handlebars';
export function getTemplate(){ 
    Handlebars.templates = 'HELLO THERE';
}

然后,在app.js,我这样做

import {getTemplate} from 'util.js'
import Handlebars from 'handlebars'
getTemplate();
console.info(Handlebars.templates) //"HELLO THERE"

为什么 Handlebars.templates 会持续存在?这是 System.js 做的事吗? Handlebars 有什么作用?

ES6 模块是单例的。即使模块是由独立文件导入的,它们都引用同一个实例。这是预期的行为并且是可能的,因为导出和导入依赖于绑定而不是复制值。

由于您可能来自 CommonJS 背景,您可能会发现 "What do ES6 modules export?" 是对行为差异的一个很好的解释。