Bob*_*ith 4 javascript node.js
我有一个模块包装我的应用程序使用的Socket.io功能,看起来像这样:
// realtime.js
var io = require('socket.io'),
sio;
exports.init = function(expressServer) {
sio = io.listen(expressServer);
}
...
Run Code Online (Sandbox Code Playgroud)
主要的app.js文件看起来像
// app.js
var rt = require('./realtime.js'),
other = require('./other.js');
...
rt.init(expressServer);
Run Code Online (Sandbox Code Playgroud)
另一个模块也使用rt.js
// other.js
var rt = require('./realtime.js');
...
Run Code Online (Sandbox Code Playgroud)
我的问题是,other.js和app.js是否都有相同的rt.js实例?
有关redis的SO的答案让我相信上述陈述是正确的,但在文档中说它
多次调用require('foo')可能不会导致模块代码多次执行.这是一个重要的特征.有了它,就可以返回"部分完成"的对象,从而允许加载传递依赖,即使它们会导致循环.
这似乎意味着它不能保证是这样的?
最后这个问题似乎表明它取决于文件名,因为只有一个rt.js实例,所以不应该多次执行.如果是这种情况,它只依赖于rt.js是同一个文件,还是取决于require指定的路径.基本上,如果rt.js和other.js在lib /中,并且app.js比其他.js中的要求低一级,而app.js会指向来自不同文件的rt.js,这有关系吗?
如果有人能为我清除这种困惑,我将不胜感激!
模块目前只评估一次,但你不应该依赖它.在模块中有任何状态被认为是不好的做法.是什么阻止你将对sio的引用传递给other.js?
//realtime
var io = require('socket.io'),
exports.init = function(expressServer) {
return io.listen(expressServer);
}
// app.js
var rt = require('./realtime.js'),
other = require('./other.js');
...
var sio = rt.init(expressServer);
// now ask other.js to use same sio instance
other.use_sio(sio);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1477 次 |
| 最近记录: |