2012-05-06 2 views
0

첫 번째 Node.js 모듈을 만드는 중이고 최선의 방법을 결정하는 데 어려움을 겪고 있습니다. 파일에 대한 경로를 사용자가 입력으로 모듈에 수신 할 때 권장되는 방법은 무엇입니까? 그런 다음 어떻게 해결할 수 있습니까? 사용자가 내 모듈을 호출하고 실행중인 코드의 위치가 다른 두 위치에 있습니다.노드 모듈로 전달 된 경로를 어떻게 해결해야합니까?

이 단계를 더 진행해 보겠습니다. 의 사용자가 (설정/settings.json에서) 이러한 경로의 배열과 JSON 설정 파일을 가지고 있다고 가정 해 봅시다 :

{ 
    "paths": [ 
    "../path1", 
    "path2", 
    "/path/to/path3", 
    "~/path4" 
    ] 
} 

지금 분명히 이러한 경로가되지 않은 실행 코드, 설정 파일을 기준으로합니다. 지금 내 방법 등

var mymodule = require('mine'); 
mymodule(__dirname, './config/settings.json'); 

나는 설정에서 읽은 모든 파일을 다음이 설정 파일의 위치를 ​​기반으로해야 __dirname, __dirname에 설정 파일의 상대 경로, 수용해야 이것은 잘못된 느낀다 . 이것은 기분이 이상합니다. 제안?

답변

0

:

var updateFileProperties = function (file, path){ 
    file._path = null; 
    file._usablePath = null; 
    file._isAbsolute = false; 

    if (path === undefined || path === null) return; 

    path = PATH.normalize (path); 

    var index = path.indexOf (":") + 1; 
    var windowsRoot = path.substring (0, index); 
    path = path.substring (index); 

    //https://github.com/joyent/node/issues/3066 
    if (path[0] === "/" && path[1] === "/"){ 
     path = path.replace (/[\/]/g, "\\"); 
     path = path.substring (0, path.length - 1); 
    } 

    file._isAbsolute = path[0] === SLASH; 
    file._path = windowsRoot + path; 
    file._usablePath = file._isAbsolute ? file._path : (windowsRoot + PATH.join (file._relative, path)); 
}; 

var File = function (path){ 
    var main = process.mainModule.filename; 
    var cwd = main.substring (0, main.lastIndexOf (SLASH)); 
    var relative = PATH.relative (process.cwd(), cwd); 

    this._relative = relative; 
    //...omitted 

    updateFileProperties (this, path); 
}; 

이 코드 조각은 상대 경로 문제를 해결합니다. _usablePath에는 실제 경로가 들어 있습니다. "." path는 주 파일이 위치한 디렉토리입니다. 호출 방법에 관계없이 예상되는 디렉토리를 가리 킵니다.

당신은 무엇을 new File (<path>).getPath() 수익률을 인쇄 기능을 테스트 할 수 있습니다.

0

나는 복잡성을 피하고 절대 경로 만 사용합니다. 대부분의 사용자는 __dirname + '../relativepath'를 사용합니다. (적어도 내가하는 일). FileUtils 소스에서

+0

질문이 약간 변경되었습니다. – Eli

+0

__dirname은 모듈 쓰기에 사용할 수 없습니다. –

관련 문제