如果有一个名为common.js
的公共文件,以及a.js
,b.js
等其他文件...
common.js
const Common = { property: 'initial' }
export { Common };
a.js
import { Common } from 'common.js';
Common.property = 'changed';
b.js
import { Common } from 'common.js';
console.log(Common.property);
首先,a.js
运行并将common.js
加载到内存中。
然后,b.js
由引擎运行。
common.js
是否会再次加载或使用内存中的现有common.js
?common.js
脚本更新xx.js
,import
将如何表现?答案 0 :(得分:4)
我假设您正在使用Node.js,因此import
会在转换后变成require
语句。
来自文档:
模块在第一次加载后进行缓存。这意味着(除其他外)每次调用
require('foo')
将获得完全相同的返回对象,如果它将解析为同一文件。
明确回答你的问题:
changed
如果执行了a.js
b.js
,则会打印initial
在线试用here。
答案 1 :(得分:0)
节点!= ES2015。
具体而言,尤其是ES2015的导入系统与Node的需求语法不同。
ES2015不允许您在运行时更改模块的形状 - 代码在内存中构建时是静态的。
关于实际实现可能做什么是值得怀疑的,但TL; DR是你不应该在模块加载之间更改文件或者可能发生坏事(TM)