나는이 이런 식으로 뭔가 보이는 내 응용 프로그램이 사용하는 Socket.io 기능을 래핑 하나 개의 모듈 :node.js 모듈을 사용하면 어떤 경우 모듈이 두 번 실행됩니까?
이// 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의 동일한 인스턴스를 것입니까?
answer on SO relating to redis
나를 위의 문장이 참 믿고 이어질하지만 the documentation here 년에는다중 호출이 모듈 코드가 실행 여러 번 원인이 될 수 없습니다 ('foo는')를 필요로했다. 이것은 중요한 특징입니다. 그것으로, "부분적으로 완료된"객체가 반환 될 수 있으므로, 주기적으로 의존성을로드 할 수 있습니다.
이는 보장 할 수없는 것 같습니다.
마지막으로 this question은 파일 이름에 따라 다르며 rt.js 인스턴스가 하나뿐이므로 두 번 이상 실행하면 안됩니다. 이 경우 rt.js가 동일한 파일에만 종속되거나 require에 의해 지정된 경로에 의존합니다. 기본적으로 rt.js 및 other.js가 lib /에 있고 app.js가 other.js의 요구 사항을 한 단계 낮추고 app.js가 다른 파일의 rt.js를 가리키는 경우이 문제가 발생합니까?
누구든지 나를 혼란에 빠뜨리면 감사하게 생각합니다.
왜 두 js 파일 모두에서 require를 호출합니까? app.js에서 모듈에 대한 참조를 전달하지 못하게하는 이유는 무엇입니까? –
코드를 많이 변경하지 않고도 깨끗한 방법을 생각할 수 없었습니다. (app.js가 필요로하는 두 모듈이 서로 요구한다면, 설정을 변경하는 데 시간이 걸릴 것입니다). 그것이 필요한 것이면 나는 그것을 위해 모든 것이지만, 나는 또한 이것이 어떻게 작동하는지 궁금해합니다. :) 귀하의 의견을 보내 주셔서 감사합니다! –
ok - 일반적으로 뭔가 (예 : redis)에 대한 참조가있는 경우 해당 호출을 모듈에 전달합니다.도움이 되었으면 좋겠다. –