[node.js] __dirname으로 path.join vs path.resolve

사용할 때 차이가 모두 path.joinpath.resolve함께를 __dirnameNode.js를 절대 경로를 해결하기 위해?

이와 같이 사용될 때 그중 하나를 선호해야합니까 (절대 경로 해상도는 사용 사례의 90 %)

const absolutePath = path.join(__dirname, some, dir);

vs.

const absolutePath = path.resolve(__dirname, some, dir);

두 방법 모두 경로를 정규화합니다.

허용 된 답변이 잘못되었으므로이 질문과 중복되지 않습니다 .



답변

예, 기능간에 차이가 있지만이 경우에 사용하는 방식은 동일한 결과를 초래합니다.

path.join두 경로를 병합하여 정규화 된 경로를 반환합니다. 절대 경로를 반환 할 수는 있지만 항상 그렇지는 않습니다.

예를 들어 :

path.join('app/libs/oauth', '/../ssl')

~로 해결하다 app/libs/ssl

path.resolve반면에, 절대 경로로 해결됩니다.

예를 들어, 다음을 실행할 때 :

path.resolve('bar', '/foo');

반환 된 경로는 생성 할 수 /foo있는 첫 번째 절대 경로이기 때문입니다.

그러나 다음을 실행하면

path.resolve('/bar/bae', '/foo', 'test');

리턴 된 경로는 /foo/test오른쪽에서 왼쪽으로 형성 될 수있는 첫 번째 절대 경로이므로 다시 됩니다 .

루트 디렉토리를 지정하는 경로를 제공하지 않으면 resolve함수에 제공된 경로 가 현재 작업 디렉토리에 추가됩니다. 따라서 작업 디렉토리가 /home/mark/project/:

path.resolve('test', 'directory', '../back');

~로 해결하다

/home/mark/project/test/back

사용 __dirname은 소스 파일을 포함하는 디렉토리의 절대 경로입니다. 를 사용 path.resolve하거나 path.join다음과 같은 경로를 제공하면 동일한 결과를 반환합니다 __dirname. 그러한 경우에는 실제로 선호의 문제 일뿐입니다.


답변

const absolutePath = path.join(__dirname, some, dir);

vs.

const absolutePath = path.resolve(__dirname, some, dir);

path.join연결할 것이다 __dirname값으로 연결해 현재 파일의 디렉토리 이름 인 somedir플랫폼 특정 분리기.

어디로

path.resolve처리합니다 __dirname, some그리고 dir즉, 오른쪽을 처리하여 붙이는 왼쪽으로.

루트 경로 의 값 중 하나 some또는 dir루트 경로에 해당하는 경우 이전 경로는 생략되고 루트로 간주하여 나머지 프로세스를 처리합니다.

개념을 더 잘 이해하기 위해 다음과 같이 조금 더 자세히 설명하겠습니다.

path.join및이 path.resolve두 가지 방법에 의해 제공 또는 nodejs 패스 모듈의 함수이다.

둘 다 경로 목록을 허용하지만 차이가 결과, 즉 경로를 처리하는 방법에 따라 다릅니다.

path.join플랫폼 별 구분 기호를 구분 기호로 사용하여 지정된 경로 세그먼트를 모두 연결 한 다음 결과 경로를 정규화합니다. path.resolve()오른쪽에서 왼쪽으로 일련의 경로를 처리하는 동안 절대 경로가 구성 될 때까지 각 후속 경로가 앞에 추가됩니다.

인수가 제공되지 않은 경우

다음 예는 두 개념을 명확하게 이해하는 데 도움이됩니다.

내 파일 이름은 index.js현재 작업 디렉토리입니다E:\MyFolder\Pjtz\node

const path = require('path');

console.log("path.join() : ", path.join());
// outputs .
console.log("path.resolve() : ", path.resolve());
// outputs current directory or equalent to __dirname

결과

λ node index.js
path.join() :  .
path.resolve() :  E:\MyFolder\Pjtz\node

path.resolve()메소드는 path.join()리턴 되는 절대 경로를 출력 합니다. 아무것도 제공되지 않은 경우 현재 작업 디렉토리를 나타내는

일부 루트 경로가 인수로 전달 될 때

const path=require('path');

console.log("path.join() : " ,path.join('abc','/bcd'));
console.log("path.resolve() : ",path.resolve('abc','/bcd'));

결과 i

λ node index.js
path.join() :  abc\bcd
path.resolve() :  E:\bcd

path.join()입력 path.resolve()경로는 플랫폼 별 구분 기호로만 연결되는 반면, 오른쪽에서 왼쪽으로 경로 순서를 처리하고 이후의 각 경로는 절대 경로가 구성 될 때까지 앞에 추가됩니다.


답변

문서에서 path.resolve:

경로가 루트 디렉토리로 해석되지 않으면 결과 경로가 정규화되고 후행 슬래시가 제거됩니다.

하지만 path.join슬래시를 계속 유지

그래서

__dirname = '/';
path.join(__dirname, 'foo/'); // '/foo/'
path.resolve(__dirname, 'foo/'); // '/foo'


답변