__dirname in Node.js
references
이번 글은 아래 글을 참고하여 작성하였습니다.
참조글
MERN Clone Coding_blog-app
위 동영상을 보며 clone coding하며 마주친 __dirname
이라는 녀석. 과연 정체가 무엇일까?
Node.js의 공식문서에 따르면
__dirname
이란 현재 모듈의 경로 이름이다.__filename
의path.dirname()
과 기능이 같다.
ex)/Users/mjr
에서node example.js
을 실행console.log(__dirname); // Prints: /Users/mjr console.log(path.dirname(__filename)); // Prints: /Users/mjr
뭔가 현재 경로를 알려주는 아이 같은데?
그럼 ./
과는 어떻게 다른 거지?
아래 내가 searching한 내용을 정리해보겠다.
./
은 현재 실행 중인 directory. 즉, terminal창에 node
를 입력한 directory를 나타낸다. 예외로require()
function을 쓰게 되면 require
를 포함한 file의 directory를 인식한다.
__dirname
은 언제나 현재 script가 실행된 directory를 나타낸다. 만약 __dirname
을 /d1/d2/myscript.js
에 넣어 실행하게 되면 값은 /d1/d2
가 된다.
예를 통해 살펴보자.
/home/user/dir/files/config.json
{ "hello": "world" }
/home/user/dir/files/somefile.txt
text file
/home/user/dir/dir.js
var fs = require('fs'); console.log(require('./files/config.json')); console.log(fs.readFileSync('./files/somefile.txt', 'utf8'));
cd /home/user/dir
을 입력하고 node dir.js
로 파일을 실행하면 output은 아래와 같다.
{ hello: 'world' } text file
그러나 같은 script를 /home/user
에서 실행한다면 output은 아래와 같이 error message를 출력하게 된다.
{ hello: 'world' } Error: ENOENT, no such file or directory './files/somefile.txt' at Object.openSync (fs.js:228:18) at Object.readFileSync (fs.js:119:15) at Object.<anonymous> (/home/user/dir/dir.js:4:16) at Module._compile (module.js:432:26) at Object..js (module.js:450:10) at Module.load (module.js:351:31) at Function._load (module.js:310:12) at Array.0 (module.js:470:10) at EventEmitter._tickCallback (node.js:192:40)
그 까닭은 ./
은 require
와 함께 작동하지 fs.readFileSync
와는 쓰이지 않기 때문이다. fs.readFileSync
의 경우 ./
을 /home/user/
로 인식해 /home/user/files/somefile.txt
가 존재하지 않는다고 보는 것이다.
Author And Source
이 문제에 관하여(__dirname in Node.js), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mame-coder/dirname-in-Node.js저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)