__dirname, __filename, process.cwd()

GI JUNG·2022년 12월 12일
3

nodejs

목록 보기
4/6
post-thumbnail
post-custom-banner

비동기를 공부하다가 오류가 생겨서 __dirname을 공부하던 중 완전하게 알고가자란 마음으로 경로와 관련된 것을 정리해본다.

🍀 dirname VS filename VS process.cwd()

__dirname, __filename, process.cwd()에 대해 nodejs docs에서는 아래와 같이 말한다.

  • __dirname: 소스파일을 포함하는 폴더까지 절대경로로 나타낸다. 위의 경우로 예를 들면 app.jsworking driectory/src/app.js에 있으므로 __dirname은 working dirctory/src가 된다.

    It returns the directory name of the directory containing the source code file.

  • __filename: dirname에서 source file을 포함한 것을 나타낸다. 이 또한 위의 경우로 예시를 들면 filename은 working directory/src/app.js이다. 즉, app.js 파일이름까지 포함한 절대경로를 나타낸다.

    The file name of the current module. This is the current module file's absolute path with symlinks resolved.

  • process.cwd(): 현재 작업경로(current working directory; 편히, package.json이 포함된 root경로)를 나타낸다. 하지만, 혼자 공부해봤을 때는 node를 실행시킨 경로가 더 정확하다고 생각한다.

    returns the current working directory of the Node.js process

확인하기

tree structure


.learn-express
├── package-lock.json
├── package.json
└── src
	└── doodle.js

💡 아 그리고 폴더 구조를 보여주기 위해서 node_modules는 어떻게 제거하면 되나 했는데 -I option을 쓰면 된다.
👉🏻 $ tree -I node_modules

showPath.js

const fs = require("fs");
const path = require("path");

console.log(`__dirname     ->`, __dirname);
console.log(`__filename    ->`, __filename);
console.log(`process.cwd() ->`, process.cwd());

출력

🍀 __dirname VS process.cwd()

혼자 이것저것 해보다 보면 __dirname__filename의 차이점은 명확하게 알 수 있다. 하지만, __dirname과 process.cwd의 차이점은 확연히 보이지 않는다. 이에 대한 차이점은 아래 표로 정리했다.

__dirnameprocess.cwd()
소스 코드파일을 포함하는 폴더의 절대 경로를 나타낸다.현재 작업경로를 나타낸다.
모듈에 대한 local 범위를 가진다.global 객체 범위를 가진다.
소스코드 파일이 포함된 경로를 나타낸다.node 명령어를 실행시킨 경로에 따라 달라진다.

위의 showPath.js를 가지고 node commandworking directory가 아닌 한 단계 위인 부모 디렉토리에서 실행하면 __dirname과 process.cwd()의 차이점을 알 수 있다.

$ node learn-express/src/showPath.js

출력

이제 출력을 보면 process.cwd()는 node command를 실행한 딱 그 경로를 나타내고 __dirname은 소스파일을 가지고 있는 폴더까지 나타난다.

🎉 마치며

__dirname을 그냥 현재 디렉토리로만 알고 있었는데 이를 이용해서 파일을 읽어오려니까 오류가 나서 정리하게 됐다. 이번 기회에 더 확실하게 경로에 대한 것을 잡을 수 있었으며, 뭔가 migration을 해보지는 않았지만 migration을 하게 될 때 헷갈리지 않고 유용하게 잘 쓸 수 있을 거 같아서 뿌듯하다!!🎉

📚 참고

dirname and filename by nodejs
process cwd by nodejs

profile
step by step
post-custom-banner

0개의 댓글