アプリが使用している Socket.io 機能をラップするモジュールが 1 つあります。これは次のようになります。
// realtime.js
var io = require('socket.io'),
sio;
exports.init = function(expressServer) {
sio = io.listen(expressServer);
}
...
メインの app.js ファイルは次のようになります
// app.js
var rt = require('./realtime.js'),
other = require('./other.js');
...
rt.init(expressServer);
他のモジュールも rt.js を使用します
// other.js
var rt = require('./realtime.js');
...
私の質問は、other.js と app.js の両方に rt.js の同じインスタンスがあるかどうかです。
redisに関連するSOの答えは、上記の声明が真実であると私に信じさせますが、ここのドキュメントでは次のように述べています
require('foo') を複数回呼び出しても、モジュール コードが複数回実行されることはありません。これは重要な機能です。これにより、「部分的に完了した」オブジェクトを返すことができるため、サイクルが発生する場合でも推移的な依存関係をロードできます。
それが事実であることが保証されていないことを暗示しているようですか?
最後に、この質問は、ファイル名に依存していること、および rt.js のインスタンスが 1 つしかないため、複数回実行してはならないことを示しているようです。その場合、同じファイルである rt.js のみに依存するか、require で指定されたパスに依存しますか。基本的に、rt.js と other.js が lib/ にあり、app.js が other.js の require の 1 レベル下にあり、app.js が別のファイルから rt.js を指す場合、これは問題になりますか?
誰かが私のためにこの混乱を解消できれば幸いです!