[Nest.js]TypeOrm migration 오류 해결

Donghun Seol·2023년 4월 10일
0

TypeOrm migration시 자꾸 에러가 났다.
migration:create와 migration:generate시 TypeOrm이 받는 인자가 달라서 발생한 문제였다.

ormconfig.ts파일은 DB 연결정보를 담은 dataSource 객체를 전달해주는 역할이다. 이 파일은 -d 플래그와 함께 migration:generate 또는 migration:run 시에만 활용된다.
따라서 create할때도-d ormconfig.ts를 주면 "알 수 없는 인수입니다: d"라는 에러가 난다.

import { DataSource } from 'typeorm';

export const AppDataSource = new DataSource({
  type: 'mysql',
  host: 'localhost',
  port: 3306,
  username: 'root',
  password: 'root',
  database: 'test',
  entities: [__dirname + '/**/*.entity.{js,ts}'],
  synchronize: false,
  migrations: [__dirname + '/**/migrations/*.{ts,js}'],
  migrationsTableName: 'migrations',
});

아래와 같이 package.json에 dataSource를 받는 경우와 받지 않는 경우를 분리했다.

package.json

"scripts": {
     "typeorm": "node -r ts-node/register ./node_modules/typeorm/cli.js",
    "typeorm:d": "node -r ts-node/register ./node_modules/typeorm/cli.js -d ormconfig.ts"
}

아래와 같이 사용하면 잘 된다.

  1. npm run typeorm은 create시(dataSource 미사용시) 사용.

    • npm run typeorm migration:create src/migrations/CreateUserTable
  2. npm run typeorm:d은 generate, run과 같이 dataSource를 사용하는 경우

    • npm run typeorm:d migration:generate src/migraions/CreateUserTable
    • npm run typeorm:d migration:run
    • npm run typeorm:d migration:revert

이렇게 하면 create와 generate시의 인자가 각각 전달되므로 오류없이 정상적으로 커맨드가 실행된다.

profile
I'm going from failure to failure without losing enthusiasm

0개의 댓글