ES6 多处导入文件,为什么文件只加载一次?

jun*_*lin 5 javascript ecmascript-6

如果有一个名为 的公共文件common.js,而其他文件如a.js, b.js...

常见的.js

const Common = { property: 'initial' }
export { Common };
Run Code Online (Sandbox Code Playgroud)

js

import { Common } from 'common.js';
Common.property = 'changed';
Run Code Online (Sandbox Code Playgroud)

js

import { Common } from 'common.js';
console.log(Common.property);
Run Code Online (Sandbox Code Playgroud)

首先,a.js运行并将其加载common.js到内存中。

然后,b.js由引擎运行。

  1. 是否common.js会再次加载或使用common.js内存中的现有内容?
  2. 如果common.js由其他xx.js脚本更新,将如何import表现?

sty*_*fle 9

我假设您使用的是 Node.js,因此在转译import后将变成require语句。

从文档:

模块在第一次加载后被缓存。这意味着(除其他外)每次调用require('foo')都会返回完全相同的对象,如果它解析为同一个文件。

来源

要明确回答您的问题:

  1. 该模块已缓存,因此您正在更改相同的对象
  2. 它将打印分配的最后一个值
    • 例如changed如果a.js被执行
    • 如果只b.js执行,那么它会打印initial

在此处在线试用。