답변:
두 함수 /는 매우 다른 방식으로 시작하는 세그먼트를 처리 합니다. join이전 인수와 연결하지만 resolve루트 디렉토리로 취급하고 이전의 모든 경로를 무시합니다 cd. 각 인수와 함께 실행 한 결과로 생각하십시오 .
path.join('/a', '/b') // Outputs '/a/b'
path.resolve('/a', '/b') // Outputs '/b'
주의해야 할 또 다른 사항은 path.resolve항상 절대 URL을 생성하고이 경로를 해결하기 위해 작업 디렉토리를 기본으로 사용한다는 것입니다. 그러나 __dirname어쨌든 절대 경로이므로 귀하의 경우에는 중요하지 않습니다.
어느 쪽을 사용해야하는지에 대한 답은 다음과 같습니다. 세그먼트 /가 어떻게 동작하기 를 원하는지에 따라 다릅니다. 단순히 결합되거나 새로운 루트로 작용해야합니까?
다른 인수가 하드 코딩 된 경우 실제로 중요하지 않습니다.이 경우 (a) 미래 에이 줄이 어떻게 변경 될지 및 (b) 코드의 다른 위치와 얼마나 일관성이 있는지 고려해야합니다.
path.join('/a', '/b', 'c')will return /a/b/c, while path.resolve('/a', '/b', 'c')will /b/c.
resolve가장 명확하지 않으며 path.cd([starting dir], [final dir])훨씬 직관적 이라고 말할 것입니다.
think of it as the result of executing cd with each argument나를 마침내 이해했다. 감사합니다
파일 시스템 경로의 기본 작업은 운영 체제에 따라 다르며이를 추상화하는 것이 필요합니다. 이 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()각 인수를 루트로 해결하고 출력을 생성합니다.
path.resolve()이다 동일하지 에 __dirname. 첫 번째는 작업 디렉토리를 리턴하고 두 번째는 현재 파일의 경로를 리턴합니다.
const path = require('path'); console.log(path.resolve()) console.log(__dirname) console.log(path.resolve()===__dirname)
path.resolve() is equivalent to __dirname
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
path.join('a','b','c')결과는 a\b\c입니다.