2014-02-25 2 views
1

노드의 기본 "모듈"모듈 (!)을 사용하여 일반 요구 메커니즘을 사용하는 대신 파일에서 수동으로 모듈을로드하는 방법을 아는 사람이 있습니까?수동으로 node.js 모듈로드

이상한 요청 인 것을 알고 있지만 변수가 전역 적으로 (해당 모듈에) 선언되어 있고 필요할 때마다 새로운 모듈로 래핑 된 모듈이 필요합니다.

var private; 

module.exports = { 
    setPrivate: function (value) {private = value} 
} 

동일한 경로를 사용하여 별도의 장소에서 두 번 require를 호출하면 같은 모듈을 다시 얻습니다. 항상 두 번 setPrivate에서 필요한 경우에만 자체 변수에 영향을 줄 수 있도록 새 모듈을 가져와야합니다.

기본적으로 require()가 처음 호출 될 때 모듈을 생성하고 반환하는 데 사용하는 메커니즘을 알아야합니다. 모듈을 직접 인스턴스화 (https://github.com/joyent/node/blob/master/lib/module.js#L293)하고 놀았지만 행운은 없었습니다. exports 속성은 항상 빈 객체입니다.

그냥 생성자를 사용하는 사람은 아무 것도 제안하지 않으니 ... 예외적 인 사용 사례가 있습니다.

답변

1

이렇게 복잡한 작업은 필요하지 않습니다.

대신, 당신은 단순히 delete it from the cache 수 : 이상적인 것은 아니지만

delete require.cache[module.id]; 
+0

이, 합리적이다. require()에 전달 된 문자열이 아니라 모듈 id가 해결 된 파일 경로가되기 때문에 캐싱 메커니즘을 완전히 무시하는 것이 바람직합니다. 따라서 캐시에서 삭제할 파일 경로를 추적해야합니다. 어떤 아이디어? – hacklikecrack

+1

@hacklikecrack : ID를 찾으려면'require.resolve()'를 사용하십시오. module.js의 Node 소스 코드를 확인하십시오. – SLaks

+0

@SLaks 감사합니다. 아직 module.js에서 관련 코드를 추출하지 못했기 때문에 여기에 게시하고 있습니다. 인내심을 가지고 모든 결과를 게시 할 것입니다. – hacklikecrack