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"
}
아래와 같이 사용하면 잘 된다.
npm run typeorm
은 create시(dataSource 미사용시) 사용.
npm run typeorm migration:create src/migrations/CreateUserTable
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시의 인자가 각각 전달되므로 오류없이 정상적으로 커맨드가 실행된다.