我正在使用require
和import
,但两者都有不同的行为。到目前为止,我假设require
和import
只是ES5而不是ES6。我正在做以下事情:
abc.js
console.log("abc");
xyz.js
console.log("xyz");
hello.js
require("./abc");
import "./xyz";
第二次更改文件并交换了两行。
hello.js
import "./xyz";
require("./abc");
它提供相同输出的两次
xyz
abc
即。 require
的输出始终在导入后。如果我只使用导入,或仅使用import
,它就会按照预期提供控制台,即。一个接一个地。
任何人都可以帮助理解这个吗?
答案 0 :(得分:2)
在hello.js
中通过import
声明的模块在运行hello.js
中的任何代码之前导入。如果import
语句出现在另一个语句之后,则无关紧要。在运行代码之前,模块仍然已加载。因此,无论您将import
语句放在何处,首先都会获得“xyz”。
require()
是程序化的。在程序运行时遇到require()
语句时运行模块代码。
答案 1 :(得分:1)
由于ES6模块尚未在node.js中实现(不确定),我假设您正在使用babel来转换export, import
语句。
当babel转换代码时,它总是将import语句放在模块的顶部,因此会发生这种情况。您可以在REPL中进行测试。