NodeJS中的`require`是否可以认为是在require的词法位置加载文件?

Can `require` in NodeJS be thought of as loading the file in the lexical position of the require?

NodeJS中的require是否可以被认为是在require的词法位置加载和运行文件,但受模块边界(模块范围)的限制?

1: console.log('foo');
2: var bar = require('bar'); // Loaded and evaluated in after line 1 is evaluated?
3: console.log('bam'); // Run after the contents of bar has been loaded and evaluated?

是,对于给定节点进程中对 require("bar") 的第一次调用。随后调用 require("bar") return 缓存副本。

如果您的代码构成了一个完整的程序,您可以保证第 1 行在 bar 被评估之前执行。

如果它构成程序的一部分,您不能保证这一点,因为 bar 可能已在之前对 require("bar").

的调用中求值

在任何一种情况下,您都可以保证在评估 bar 之后执行第 3 行。

延伸阅读: