要求和导入显示不同的行为。 这是为什么?

我同时使用requireimport但是从两者都得到了一些不同的行为。 到目前为止,我假设requireimport只是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 ,那么就是按照预期的那样给予游戏机。 一个接一个地。 任何人都可以帮助理解这一点?

hello.js通过import声明的模块在运行hello.js任何代码之前被导入。 如果import语句出现在另一个语句之后,则无关紧要。 代码运行之前,模块仍然被加载。 所以这就是为什么你先得到“xyz”的原因,不pipe你把import语句放在哪里。

require()另一方面是编程式的。 在程序运行时遇到require()语句时运行模块代码。

由于ES6模块还没有被实现(不确定)在node.js中,我假设你使用babel来编译export, import语句。

当babel在编译代码时,它总是将导入语句放在模块的顶部,因此会发生这种情况。 你可以在REPL中testing它。

DEMO

更深入的import细节和require