Миграции были добавлены в корневую папку, а не в папку миграции - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь настроить миграции для Nestjs TypeORM, в моем TypeOrmModule.forRoot() я добавил нужную папку для миграций, но она продолжает добавлять миграции в корневую папку.

TypeOrmModule.forRoot({
  type: 'mssql',
  host: 'test',
  port: 1,
  username: 'test',
  password: 'test',
  database: 'test',
  entities: [__dirname + '/**/entities/*{.ts,.js}'],
  synchronize: false,
  options: {
    useUTC: true,
  },
  migrations: [__dirname + '/**/migration/*.ts'],
  cli: {
    migrationsDir: __dirname + '/**/migration',
  },
})

1 Ответ

0 голосов
/ 09 ноября 2018

Я думаю, это может быть связано с тем, что при создании миграции вы, вероятно, используете пакет typeorm, верно? (вроде так typeorm migration:create -n PostRefactoring). Который будет использовать конфигурацию, совершенно отличную от той, которую вы указали в своем приложении. Я предполагаю, что самый простой способ - создать файл env и использовать TYPEORM_MIGRATION_DIR для определения вашего каталога миграции.

См. Здесь для доступных опций env http://typeorm.io/#/using-ormconfig/using-environment-variables. Затем вы можете связать ваши envs с вашим приложением, чтобы они были определены в одном месте.

Я не хочу быть тем человеком, который будет рекламировать свои собственные пакеты, вы можете легко выполнить свои собственные настройки, если хотите. Я построил модуль конфигурации, который вы можете использовать для настройки типа, например так:

https://github.com/nestjs-community/nestjs-config#typeorm

import {Module} from '@nestjs/common';
import {ConfigModule, ConfigService} from 'nestjs-config';
import {TypeOrmModule} from '@nestjs/typeorm';
import * as path from 'path';

@Module({
    imports: [
        ConfigModule.load(path.resolve(__dirname, 'config/**/*.{ts,js}')),
        TypeOrmModule.forRootAsync({
            useFactory: (config: ConfigService) => config.get('database'),
            inject: [ConfigService],
        }),
    ],
})
export class AppModule {}

Это позволит вам определить ваши конфиги в файле примерно так:

//src/config/database.ts
export default {
    type: 'mssql',
    host: process.env.TYPEORM_HOST,
    port: process.env.TYPEORM_PORT,
    username: process.env.TYPEORM_USERNAME,
    password: process.env.TYPEORM_PASSWORD,
    database: process.env.TYPEORM_DATABASE,
    entities: [process.env.TYPEORM_ENTITIES],
    synchronize: process.env.TYPEORM_SYNCHRONIZE == 'true',
    migrationsDir: process.env.TYPEORM_MIGRATIONS_DIR
};

Тогда ваш .env

TYPEORM_HOST=test
TYPEORM_USERNAME=test
TYPEORM_PASSWORD=test
TYPEORM_PORT=1
TYPEORM_MIGRATIONS_DIR=src/migrations

Теперь вы сможете использовать команду typeorm, и вы по-прежнему будете определять свои базы данных в одном месте. Надеюсь это поможет!

...