Categories
Tags
364 words
2 minutes
Automated Typeorm Schema Migration.
tl;dr
package.json
{
"scripts": {
"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js",
"migration": "$(rm src/migrations/* && npm run typeorm migration:generate src/migrations/InitSchema -- -d src/scripts/data-source.ts && npm run typeorm migration:run -- -d src/scripts/data-source.ts) || true",
}
}
src/scripts/data-source.ts
import * as dotenv from "dotenv";
import { DataSource } from "typeorm";
dotenv.config({ path: `.env.${process.env.NODE_ENV}` });
export default new DataSource({
type: "postgres",
host: process.env.DB_HOST,
port: Number(process.env.DB_PORT),
username: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
entities: ["src/schemas/**/*.ts"],
migrations: ["src/migrations/**/*.ts"],
synchronize: false,
});
Introduction
학교 인트라넷을 개발중 typeorm의 synchronize 기능이 e2e test 환경에서 정상적으로 동작하지 않아, 해결방안을 탐색중 synchronize 기능은 안전하지 않다는 사실을 깨닫고 migration 방식으로 migration 했다 (말장난 ㄷㄷ). 고로 이 문서에서는 typeorm의 migration 기능을 프로젝트에 적용하는 방법에 대하여 설명할 것이다.
db 연결
db 커넥션을 만들어주는 스크립트를 하나 짠다src/scripts/data-source.ts
import * as dotenv from "dotenv";
import { DataSource } from "typeorm";
dotenv.config({ path: `.env.${process.env.NODE_ENV}` });
export default new DataSource({
type: "postgres",
host: process.env.DB_HOST,
port: parseInt(process.env.DB_PORT),
username: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
entities: ["src/schemas/**/*.ts"],
migrations: ["src/migrations/**/*.ts"],
synchronize: false,
});
이전 migration 데이터 삭제
이상하게도 기존 migration 파일이 남아있으면 오류가 나기 때문에 해당 파일을 없애준다.
rm src/migrations/*
migration 데이터 생성
npm run typeorm migration:generate src/migrations/InitSchema -- -d src/scripts/data-source.ts
migration!
npm run typeorm migration:run -- -d src/scripts/data-source.ts
merge command
순차적으로 위의 명령들을 실행해야하는데, 명령에 실패하면 뒤에 명령을 실행시키면 안되니, &&로 연결시켜준다
(rm src/migrations/* && npm run typeorm migration:generate src/migrations/InitSchema -- -d src/scripts/data-source.ts && npm run typeorm migration:run -- -d src/scripts/data-source.ts
끝!
Automated Typeorm Schema Migration.
https://blog.lyj.kr/posts/typeorm_schema_migration/typeorm-schema-migration/