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

时间:2016-01-08 02:11:11

标签: javascript handlebars.js ecmascript-6 systemjs jspm

我在一个小型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会做什么?

1 个答案:

答案 0 :(得分:1)

ES6模块是单身人士。即使模块是由隔离文件导入的,它们也都引用同一个实例。这是预期的行为,因为导出和导入依赖于绑定而不是复制值。

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