ts-node import 에러 해결하기
2024년 02월 14일TypeScript 프로젝트를 개발하는 동안 **ts-node
**를 사용하여 TypeScript 파일을 실행하다가 import
관련 에러가 발생하는 경우가 있습니다.
Problem solution for ES Module error: Cannot use import statement outside a module
이러한 에러는 주로 Node.js가 기본값으로 CommonJS 모듈 형식을 사용하고 있는데, TypeScript 설정이 ES 모듈 형식을 사용하도록 설정되어 있을 때 발생합니다. 이러한 문제의 원인과 해결 방법에 대해 알아보겠습니다.
1 원인
ts-node 작동 원리
**ts-node
**의 작동 원리는 다음과 같습니다.
- TypeScript 컴파일러는 받은 TypeScript 코드를 JavaScript 코드로 컴파일합니다.
- 그런 다음, 컴파일된 JavaScript 코드가 Node.js 환경에서 실행됩니다. 이때 CommonJS 모듈 형식을 사용해서 Node.js 환경에서 실행됩니다.
{
"compilerOptions": {
"module": "esnext",
}
}
만약 TypeScript 설정이 위 처럼 ES 모듈 형식으로 지정되어 있다면 아래의 순서로 실행되고 에러가 발생합니다.
import
문을 사용하는 코드가 ES 모듈 형식으로 컴파일됩니다.- Node.js가 기본적으로 CommonJS를 사용하기 때문에 모듈 형식의 코드를 실행할 수 없게 됩니다.
2. 해결 방법
1. tsconfig.json 수정
가장 간단한 방법은 tsconfig.json
파일에서 **compilerOptions.module
**을 **commonjs
**로 오버라이딩하는 것입니다. 이렇게 하면 ts-node로 실행 시 TypeScript 컴파일러가 CommonJS 모듈 형식으로 코드를 생성하게 됩니다.
{
//...
"ts-node": {
"compilerOptions": {
"module": "commonjs"
}
},
}
2. ts-node 옵션 사용
또 다른 방법은 **ts-node
**를 실행할 때 --compiler-options
옵션을 사용하여 직접 module
옵션을 설정하는 것입니다.
ts-node --compiler-options '{"module":"commonjs"}' your_script.ts
TAGS
TYPESCRIPT