javascript - ES6 在多个地方导入一个文件,为什么文件只加载一次?

标签 javascript ecmascript-6

如果有一个名为common.js的公共(public)文件,以及其他如a.jsb.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 由引擎运行。

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

最佳答案

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

来自文档:

Modules are cached after the first time they are loaded. This means (among other things) that every call to require('foo') will get exactly the same object returned, if it would resolve to the same file.

Source

明确回答您的问题:

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

在线试用 here .

关于javascript - ES6 在多个地方导入一个文件,为什么文件只加载一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45638740/

相关文章:

javascript - JS 中的 Async/Await 混淆

html - 浏览器如何处理异常?

javascript - Mustache - 有条件地从数组数据渲染列表

javascript - 将值保存在数组中(并覆盖每次更新)

javascript - 通过 cookie 的 jQuery 自定义背景

javascript - 需要迭代最后两个对象

javascript - fetch请求返回的中间结果应该叫什么?一个 Blob 还是只是响应?

javascript - 如何根据条件从数组中删除重复元素?

javascript - 如何通过 ES6 "class"函数以 Angular 传递数据

javascript - Node.js 计划支持导入/导出 ES6 (ECMAScript 2015) 模块