Node.js NodeJS中的'require'可以被认为是在require的词法位置加载文件吗?

Node.js NodeJS中的'require'可以被认为是在require的词法位置加载文件吗?,node.js,require,Node.js,Require,NodeJS中的require是否可以被视为在require的词法位置加载和运行文件,但以模块边界(模块范围)为边界 是,对于给定节点进程中对require(“bar”)的第一次调用。对require(“bar”)的后续调用返回一个缓存副本 如果您的代码构成了一个完整的程序,您可以保证在计算bar之前执行第1行 如果它是程序的一部分,您不能保证这一点,因为在先前调用require(“bar”)时可能已经对bar进行了评估 在任何一种情况下,您都可以保证在计算bar之后执行第3行 进一步阅读:

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


是,对于给定节点进程中对
require(“bar”)
的第一次调用。对
require(“bar”)
的后续调用返回一个缓存副本

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

如果它是程序的一部分,您不能保证这一点,因为在先前调用
require(“bar”)
时可能已经对
bar
进行了评估

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

进一步阅读:


请注意,
require
是一个阻塞调用,因此在加载模块时会阻塞事件循环。不仅是缓存副本,而且是正确的单例。当您需要单例时,您可以使用这个事实来“欺骗”——您不需要在node.js中实现单例,因为
module.exports
是作为单例实现的
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?