假设我有以下文件。
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
中一样?
答案 0 :(得分:4)
是否等同于在
main.js
中包含以下内容?
不是。从"./file"
导入确实意味着已加载"./file"
的任何依赖项,(在这种情况下)意味着已加载"package"
,这意味着将运行其顶层代码( Package.method()
)。这将在运行main.js
的顶级代码之前发生(禁止循环关系)。但这并不是源已从"./file"
中取出并粘贴到main.js
中。特别是,如果另一个文件也从"./file"
导入,则它的顶级模块代码将不第二次运行。
Lin Clark在模块加载here上有一篇不错的文章,其中讨论了模块加载的三个阶段(解析,实例化和评估)以及如何处理周期性关系。