# 파일 시스템 (File System)

# __dirname

# __dirname이란?

Node.js는 모듈 관계가 있는 경우가 많아 현재 파일의 경로나 파일명을 알아야 하는 경우가 많다. Node.js는 내장 변수로 __filename, __dirname 이라는 키워드로 경로에 대한 정보를 제공한다. 그 중 __dirname은 directory와 name의 합성어로 현재 실행하는 파일의 절대경로이다.

// file명을 포함한 절대 경로
console.log(__filename); // D:/practice/test.js

// file 명을 제외한 절대 경로
console.log(__dirname); // D:/practice
1
2
3
4
5

# ESM (ES Modules)에서 __dirname 사용하기

__dirname은 CommonJS 모듈 시스템에서만 정의되며, ECMASCript 모듈(ESM) 시스템에서는 기본적으로 지원되지 않는다.

따라서 ESM을 사용하는 경우에는 import.meta.url을 사용하여 현재 모듈의 URL을 가져오고, 이를 기반으로 제공된 경로를 사용하여야 한다.

// index.mjs
console.log(new URL(import.meta.url));

/*
URL {
  href: 'file:///D:/practice/test.mjs',
  origin: 'null',
  protocol: 'file:',
  username: '',
  password: '',
  host: '',
  hostname: '',
  port: '',
  pathname: '/D:/practice/test.mjs',
  search: '',
  searchParams: URLSearchParams {},
  hash: ''
} 
 */
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

Info

import.meta 속성은 모듈의 URL과 같은 모듈에 대한 정보를 포함한다.