[ typeORM ] SyntaxError: Cannot use import statement outside a module
🌈 프로그래밍/삽질

[ typeORM ] SyntaxError: Cannot use import statement outside a module

반응형

 

[ 오류 원인 ]

postgres DB를 사용해서 Nest backend app을 구현하고 있는데

typeorm을 사용하기 위해서 config 파일을 정의해주어야 했다.

그런데 js 기반이라 ts의 config 파일은 인식이 잘 되어지지 않는것이 있는 것 같다.

js 파일로 config 파일을 만들면 해결이 될 것처럼 보이긴 하지만 한번 해결해보고 싶었다.

 

 

[ 오류 발견 ]

 

 

[ 시도 방법 ]

1. node version 재설치

- npm 관련해서 version이 잘못되었는지 삭제를 하고 버전을 업데이트 후 시도

- 실패..

2. package.json 파일 수정

"type": "module"

or

"module" : "commonjs"

- package.json 맨 아래부분에 위의 구문 추가 해보기

- 실패..

3. typeorm.config.ts 파일 수정

- 구글링을 해보니 .ts 파일로 config 파일을 만들면 왜인지는 모르겠는데 DB에서 config 파일을 인식못한다고 한다.

- 그래서 entities 들을 찾지 못해서 발생하는 문제일 수도 있다고 본 것 같았다.

위의 이미지가 그 결과이다. ts, js 파일을 인식을 못해서 join 구문을 사용해서 모든 entity들을 가져오도록 바꿔보았지만 실패..

4. tsconfig-paths 모듈 설치

- 어디에서는 모듈을 설치하면 해결된다고 한다. 뭔가 될 것 같았지만 실패..

npm i tsconfig-paths

 

그렇게 이리저리 헤메다가 천천히 다시 생각해보았다..

DB에서 인식할 entity를 넣는 작업인데 오류가 난다?

그렇다면 모듈이 과연 문제일까? 아니면 버전? 아니다.

그렇다면 그냥 entity들을 직접 넣어주면 되지 않을까??

바로 해결..

 

typeorm.config.ts

import { TypeOrmModuleOptions } from "@nestjs/typeorm";
import { User } from "src/auth/user.entity";
import { Board } from "src/boards/board.entity";

export const typeORMConfig: TypeOrmModuleOptions = {
    type: 'postgres',
    host: 'localhost',
    port: 5432,
    username: 'postgres',
    password: 'postgres',
    database: 'boardproject',
    entities: [User, Board],
    synchronize: true
}

처럼 entities에 경로를 넣지 말고 내가 정의해준 entity들을 넣어주었더니 오류가 해결되었다!

사실은 오류 이름이 바뀐 ㅎ

그런데 정말 경로로 entity들을 가져오게 하는 게 더 좋아보이긴 한다..

근본적인 해결법이 아닌 듯 했다. 좀더 알아보고 글을 수정하도록 해야겠다!

반응형