[node.js] __dirname으로 path.join vs path.resolve
사용할 때 차이가 모두 path.join
와 path.resolve
함께를 __dirname
Node.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
값으로 연결해 현재 파일의 디렉토리 이름 인 some
및 dir
플랫폼 특정 분리기.
어디로
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'