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