Node.js의 express 프레임워크를 사용하던 중, 모듈을 임포트하는 방식을 ES6로 전환하니 위와 같은 에러가 발생했다.
ES6 Module Scope
Node.js에서는 기본적으로 CommandJS로 모듈을 불러오는데, package.json 파일에 "type": "module"
을 추가해서 ES6로 모듈을 불러오게 되면 __dirname을 사용할 때 문제가 생긴다.
ES6에서는 __dirname을 정의하지 않기 때문이다. 따라서 직접 __dirname 변수를 정의해주어야 한다.
import path from "path";
import { fileURLToPath } from "url";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
이렇게 한 후 node로 js 파일을 실행하면 정상적으로 작동하는 것을 볼 수 있다.