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

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

本文关键字:文件 模块 存在 另一个 为什么 js System 一个 使用      更新时间:2023-09-26

我正在开发一个小型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背景,您可能会发现"ES6模块导出什么?"是关于行为差异的一个很好的解释。