1

我有三个文件: - main.js <- 依赖项:module.js,helper.js - module.js <- 依赖项:helper.js - helper.js <- 没有依赖项

main.js 和 module.js 都是从 helper.js 导入的;并且 main.js 是从 module.js 导入的

从 module.js 导入的函数 main.js 使用来自 helper.js 的函数

当我运行 main.js 时:helper.js 会被导入两次,一次是 main.js,一次是 module.js,还是 helper.js 只会被 main.js 导入一次?

主.js:

    import {someFunction} from "./helper.js";
    import {someOtherFunction} from "./module.js";
    someFunction();
    someOtherFunction();

模块.js:

    import {someFunction} from "./helper.js";
    function someOtherFunction(){
        // do something using someFunction();
        someFunction();
    };
    export {someOtherFunction};

helper.js:

   function someFunction(){
       // do something
   }; 
   export {someFunction};
4

1 回答 1

1

一个模块总是会被加载一次。

ES 262 规范在第 413 页上声明:

【导入模块】如果正常完成,一定是幂等的。每次使用特定的引用模块调用它时,说明符对作为参数,它必须返回相同的模块记录实例。

多个不同的引用模块,说明符对可能映射到同一个模块记录实例。实际的映射语义是实现定义的,但通常将规范化过程应用于说明符作为映射过程的一部分。典型的规范化过程将包括诸如字母大小写折叠以及相对和缩写路径说明符的扩展之类的操作。

于 2019-08-20T20:04:18.237 回答