[Node.js] __filename , __dirname, path.resolve, path.join 란?

wheezy·2021년 11월 22일
0

Node.js

목록 보기
2/4
post-custom-banner

path 모듈

path 모듈은 운영체제별로 경로 구분자가 달라 생기는 문제를 쉽게 해결하기 위해 등장했다.

  • window: C:\Users\ano 처럼 \를 사용하여 폴더 구분
  • Posix(macOS, Linux): /Users/ano 처럼 /를 사용해 구분

path 모듈을 내장 모듈이므로 별도 npm 설치 없이 불러올 수 있다.

const path = require('path')

dirname, filename

파일에 __filename, 과 __dirname 변수를 넣어두면 실행 시 현재 파일명과 파일 경로로 바뀐다.
실제로 사용하고 있는 코드에서 실행시켜보았다.

//file명을 포함한 절대 경로
console.log(__filename) //D:\yk\projects\API\src\controllers\notice.js

//file명을 제외한 절대 경로
console.log(__dirname) //D:\yk\projects\API\src\controllers\notice.js

Path.join

path.join([...paths])에서 paths는 항상 string이어야 한다.

path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// Returns: '/foo/bar/baz/asdf'

path.join('foo', {}, 'bar');
// Throws 'TypeError: Path must be a string. Received {}'

첫번째 예시는 하나하나 string들을 경로라고 생각해서 /로 구분지어 새로운 경로를 만들어낸다. quux가 포함되지 않는 이유는 '...'가 상위 폴더를 가리키기 때문이다.

Path.resolve

path.join([...paths])에서 paths는 항상 string이어야 한다.

path.resolve('/foo/bar', './baz');
// Returns: '/foo/bar/baz'

path.resolve('/foo/bar', '/tmp/file/');
// Returns: '/tmp/file'

path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
// If the current working directory is /home/myself/node,
// this returns '/home/myself/node/wwwroot/static_files/gif/image.gif'

path.join과 path.resolve 차이점

  • path.resolve는 오른쪽에서 왼족으로 경로를 읽는다.
  • /폴더명을 만나면 절대 경로로 인식해서 그 경로를 바로 반환한다. (예시 2번)
  • 경로를 합치기 위해서는 상대경로인 ./폴더명으로 확실하게 구분해줘야한다. (예시 1번)

path.resolve는 오른쪽에서 왼쪽으로 경로를 읽고, 상대경로와 절대경로를 구분할 수 있다.

참고

https://p-iknow.netlify.app/node-js/path-moudle/
https://programming119.tistory.com/106
https://nodejs.org/api/path.html#pathjoinpaths

profile
🧀 개발을 하면서 도움이 되었던 부분을 기록하는 공간입니다 🧀
post-custom-banner

0개의 댓글