program tip

__dirname으로 path.join vs path.resolve

radiobox 2020. 7. 29. 08:05
반응형

__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() only concatenates the input list with platform specific separator while the path.resolve() process the sequence of paths from right to left, with each subsequent path prepended until an absolute path is constructed.


from doc for path.resolve:

The resulting path is normalized and trailing slashes are removed unless the path is resolved to the root directory.

But path.join keeps trailing slashes

So

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

참고URL : https://stackoverflow.com/questions/39110801/path-join-vs-path-resolve-with-dirname

반응형