想象一下,我使用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中的缓存中.
然后第二次调用它时,调用者得到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(帮帮我理解)
> Understanding Node.js modules: multiple requires return the same object?
> Self modifying code in node.js, would cluster work?(关于require.cache)
编辑:
其他有用的链接:
node.js require() cache – possible to invalidate?