2013-03-06 3 views
16

디버그 부울을 가진 실행 노드/javascript 스크립트가 있는데, true로 설정하면 몇 개의 파일이 작성됩니다. 이 실행 파일은 노드 모듈이기도합니다. 스크립트를 실행하는 사용자의 작업 디렉토리에 따라 함수가 파일을 쓸 디렉토리를 찾을 수없는 것으로 보입니다.모듈 내의 상대 파일 시스템 쓰기 경로

모듈은 경로가 될 수있다하는 것이

output/ 
lib/ 
    helpers.js 
index.js 

내 원래 추론과 같이 구성되어있다. node_module 폴더 내에서 스크립트를 실행하는 경우

helper.write = function(data,filename){ 
    if(typeof data !== "string") data = JSON.stringify(data); 
    fs.writeFileSync("./output/"+filename, data); 
}; 

그러나이 작동하는 모듈이 다른 실행 파일에 사용되는 경우는 더욱 혼란 도착이

node ./my_app/node_modules/the_module/index.js 

처럼

fs.writeFileSync("process.cwd()+"/node_modules/the_module/output/"+filename, data); 

그 라이브러리를 사용합니다.

node ./my_app/run.js 

이러한 모든 변수와 독립적으로 파일을 저장하는 방법이 있습니까?

답변

42

질문을 올바르게 이해하면 현재 스크립트와 관련된 경로에 항상 쓰기를 원할 것입니다. 현재 실행중인 스크립트에있는 디렉토리의 이름을 얻으려면, 당신과 같이 __dirname를 사용할 수 있습니다

말했다되고 그건
var path = require('path'); 

helper.write = function(data,filename){ 
    if(typeof data !== "string") data = JSON.stringify(data); 
    var file = path.join(__dirname, 'output', filename); 
    fs.writeFileSync(file, data); 
}; 

, 나는 그것이 당신의 node_modules 디렉토리 안에 파일을 작성해야하는 것이 좋습니다 생각하지 않습니다 . 나는 당신의 모듈이 파일 시스템의 어딘가에 파일에 대한 전체 경로를 요구할 것을 권한다. 호출자가 자체 프로젝트 트리의 출력 디렉토리에 쓰기를 원할 경우 다시 __dirname 트릭을 사용할 수 있습니다.