다음 호출간에 차이가 있습니까?
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.join
및 path.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