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.cache
caching中。
然后第二次被调用,调用者得到require.cache['./service/user']
,在那里存储你的对象。
因此,您在department.js和user.js中都有相同的对象。
资源:
- http://nodejs.org/docs/latest/api/modules.html#modules_caching
- http://nodejs.org/docs/latest/api/modules.html#modules_cycles (帮我理解)
- 了解Node.js模块:多个需要返回相同的对象?
- 在node.js中自我修改代码会集群工作吗? (关于require.cache)
编辑:
其他有用的链接:
node.js require()caching – 可能失效?