将一个JS文件导入另一个JS文件时会发生什么?

时间:2019-08-09 12:20:11

标签: javascript

假设我有以下文件。

file.js

import Package from 'package';

Package.method();

main.js

当我以以下方式将file.js导入main.js时...

import './file';

Package.someOtherMethod();

是否等同于在main.js中包含以下内容?

import Package from 'package';

Package.method();

Package.someOtherMethod();

也就是说,我是否可以考虑使用import './file';导入JS文件,就像将代码插入main.js中一样?

1 个答案:

答案 0 :(得分:4)

  

是否等同于在main.js中包含以下内容?

不是。从"./file"导入确实意味着已加载"./file"的任何依赖项,(在这种情况下)意味着已加载"package",这意味着将运行其顶层代码( Package.method())。这将在运行main.js的顶级代码之前发生(禁止循环关系)。但这并不是源已从"./file"中取出并粘贴到main.js中。特别是,如果另一个文件也从"./file"导入,则它的顶级模块代码将第二次运行。

Lin Clark在模块加载here上有一篇不错的文章,其中讨论了模块加载的三个阶段(解析,实例化和评估)以及如何处理周期性关系。