要求和导入显示不同的行为。 这是为什么?
我同时使用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
,那么就是按照预期的那样给予游戏机。 一个接一个地。 任何人都可以帮助理解这一点?
在hello.js
通过import
声明的模块在运行hello.js
任何代码之前被导入。 如果import
语句出现在另一个语句之后,则无关紧要。 代码运行之前,模块仍然被加载。 所以这就是为什么你先得到“xyz”的原因,不pipe你把import
语句放在哪里。
require()
另一方面是编程式的。 在程序运行时遇到require()
语句时运行模块代码。
由于ES6模块还没有被实现(不确定)在node.js中,我假设你使用babel来编译export, import
语句。
当babel在编译代码时,它总是将导入语句放在模块的顶部,因此会发生这种情况。 你可以在REPL中testing它。
DEMO
更深入的import
细节和require