Node.js – require()d模块的范围是什么?

我试图组织一个使用Express 4开发的Node.js应用程序,并且对使用require()导入的模块范围感到困惑。

想象一下,我使用require('./services/user')来导入一个模块,比如routes / user.js中的服务

 var userService = require('./services/user'); 

然后我在另一个模块routes / department.js中执行相同的require('./services/user')

我的问题是:userService是user.js和department.js中的同一个实例还是每个都有自己的userService对象? 也就是说,一旦你通过module.exports = XXX导出了一些元素,如果你需要相同的文件,你会总是得到相同的实例吗? 你能告诉我在哪里指定的Node.js文档?

如果我正确理解你的问题,你有这些文件:

 . |_. app.js |_. routes/ |_. user.js |_. department.js |_. services/ |_. user 

而你的代码这样做:

 app.js call user.js user.js call user app.js call department.js department.js 

在这种情况下,在第一次需要用户时,它被放在require.cachecaching中。

然后第二次被调用,调用者得到require.cache['./service/user'] ,在那里存储你的对象。

因此,您在department.js和user.js中都有相同的对象。

资源:

编辑:

其他有用的链接:

node.js require()caching – 可能失效?