[node.js] path.resolve와 path.join 호출의 차이점은 무엇입니까?

다음 호출간에 차이가 있습니까?

path.join(__dirname, 'app')

vs.

path.resolve(__dirname, 'app')

어느 것이 선호되어야합니까?



답변

두 함수 /는 매우 다른 방식으로 시작하는 세그먼트를 처리 합니다. join이전 인수와 연결하지만 resolve루트 디렉토리로 취급하고 이전의 모든 경로를 무시합니다 cd. 각 인수와 함께 실행 한 결과로 생각하십시오 .

path.join('/a', '/b') // Outputs '/a/b'

path.resolve('/a', '/b') // Outputs '/b'

주의해야 할 또 다른 사항은 path.resolve항상 절대 URL을 생성하고이 경로를 해결하기 위해 작업 디렉토리를 기본으로 사용한다는 것입니다. 그러나 __dirname어쨌든 절대 경로이므로 귀하의 경우에는 중요하지 않습니다.

어느 쪽을 사용해야하는지에 대한 답은 다음과 같습니다. 세그먼트 /가 어떻게 동작하기 를 원하는지에 따라 다릅니다. 단순히 결합되거나 새로운 루트로 작용해야합니까?

다른 인수가 하드 코딩 된 경우 실제로 중요하지 않습니다.이 경우 (a) 미래 에이 줄이 어떻게 변경 될지 및 (b) 코드의 다른 위치와 얼마나 일관성이 있는지 고려해야합니다.


답변

파일 시스템 경로의 기본 작업은 운영 체제에 따라 다르며이를 추상화하는 것이 필요합니다. 이 path모듈은 파일 및 디렉토리 경로 작업을위한 유틸리티 또는 API를 제공합니다. 당신은 그것을 사용하여 프로젝트에 포함시킬 수 있습니다

const path = require('path');

path.joinpath.resolve패스 모듈의 두 가지 방법이다.

이 두 가지 방법 모두 일련의 경로 또는 경로 세그먼트를 허용합니다.

path.resolve()방법은 일련의 경로 또는 경로 세그먼트를 절대 경로 로 해석합니다 .

path.join()방법은 플랫폼 별 구분 기호를 구분 기호로 사용하여 지정된 모든 경로 세그먼트를 결합한 다음 결과 경로를 정규화합니다.

행동을 더 잘 이해하고 차별화하기 위해 다른 시나리오로 설명하겠습니다.

1. 빈 문자열에 인수를 제공하지 않으면

내 경우에는 내 파일 이름은 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 of the node process

실행 결과는 다음과 같습니다.

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

위의 실험에서 추론 은 반환 path.resolve()방법 으로 절대 경로를 출력하는 방법입니다 path.join(). 아무것도 제공되지 않은 경우 현재 작업 디렉토리 또는 상대 경로를 나타냅니다.

2. 인수로 / path 추가.

const path=require('path');

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

결과는

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

우리가이 실험에서 발견 할 수있는 추론은 path.join()플랫폼에 따라 구분자만으로 입력 목록을 연결하는 반면, path.resolve()오른쪽에서 왼쪽으로 경로의 순서를 처리하고 각각의 후속 경로는 절대 경로가 구성 될 때까지 앞에 추가됩니다.

path.join()각 인수를 OS 특정 구분 기호로 연결하고 path.resolve()각 인수를 루트로 해결하고 출력을 생성합니다.


답변

1) path.resolve는 절대 경로를 만듭니다.

이 방법은 절대 경로가 구성 될 때까지 오른쪽에서 왼쪽 으로 완전한 경로 만듭니다 .

예를 들면 다음과 같습니다.

path.resolve('/a', 'b', 'c');     //    C:\a\b\c
path.resolve('/a', '/b', 'c');    //    C:\b\c
path.resolve('/a', '/b', '/c');   //    C:\c

절대 경로가 생성되지 않으면 현재 작업 디렉토리를 사용하는 메소드입니다.

예를 들면 다음과 같습니다.

path.resolve('a', 'b', 'c');     //    C:\{current_working_directory}\a\b\c

2) path.join은 모든 경로를 결합하고 결과를 정규화합니다

예를 들면 다음과 같습니다.

path.join('/a', '/b', '/c');   //   \a\b\c
path.join('/a', '/b', 'c');    //   \a\b\c
path.join('/a', 'b', 'c');     //   \a\b\c
path.join('a', 'b', 'c');      //   \a\b\c


답변