nestjs typeorm cli Использовать общую конфигурацию (конфиг). Пример кода
Primary tabs
Основная идея -- для nest использовать передаваемый как параметр configService, а для режима cli командной строки самостоятельно парсить env (и вообще в любом случае самостоятельно если сервис конфигурации не переда как аргумент). Пример реализации ниже
Пример конфига config.ts (в нашем случае лежал относительно корня проекта так: src/modules/database/config.ts ):
import { TypeOrmModuleOptions } from '@nestjs/typeorm'; import { ConfigService } from '@nestjs/config'; import { config as dotenvConfig } from 'dotenv'; import * as path from 'path'; const dotenvValues = dotenvConfig().parsed; function getFromConfigServiceOrEnvDirectly( optionName: string, configService: ConfigService | null = null, ) { return configService ? configService.get(optionName) : dotenvValues[optionName]; } export function getTypeORMConfig( configService: ConfigService | null = null, ): TypeOrmModuleOptions { console.log( 'entity pattern', path.join(__dirname, '/entities') + '/**/*entity{.ts,.js}', ); const config: TypeOrmModuleOptions = { type: 'postgres', // name: 'main', host: getFromConfigServiceOrEnvDirectly('POSTGRES_HOST', configService), port: getFromConfigServiceOrEnvDirectly('POSTGRES_PORT', configService), username: getFromConfigServiceOrEnvDirectly('POSTGRES_USER', configService), password: getFromConfigServiceOrEnvDirectly( 'POSTGRES_PASSWORD', configService, ), database: getFromConfigServiceOrEnvDirectly('POSTGRES_DB', configService), entities: [ path.join(__dirname, '/../../entities') + '/**/*entity{.ts,.js}', ], synchronize: false, migrationsTableName: 'migrations_table', migrations: [path.join(__dirname, '/../../migrations') + '/*.ts'], cli: { migrationsDir: path.join(__dirname, '/../../migrations'), }, logging: process.env.NODE_ENV === 'production' ? false : 'all', }; console.log('my config', config); return config; } export default getTypeORMConfig(); // for cli command line
--где экспорт
export default getTypeORMConfig();
как раз используется ради консольно команды миграций
в этой конфигурации папки миграций и сущностей располагались так:
src/migrations src/entities/
Конфигурация NestJs с этим конфигом
Сконфигурируем модуль с конфигом описанным выше:
import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { getTypeORMConfig } from 'src/modules/database/config'; @Module({ imports: [ TypeOrmModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: (configService: ConfigService) => getTypeORMConfig(configService), }), ], }) export class DatabaseModule {}
Консольные команды, использующие тот же конфиг
Консольные команды для кофигурации выше (package.json scripts) могут быть такими:
"typeorm": "node --require ts-node/register ./node_modules/typeorm/cli.js --config src/modules/database/config.ts", "migration:create": "npm run typeorm migration:create -- -n", "migration:run": "npm run typeorm migration:run", "migration:run:debug": "npm run typeorm:debug migration:run", "migration:revert": "npm run typeorm migration:revert", "migration:generate": "npm run typeorm migration:generate -- -n", "migration:generate:debug": "npm run typeorm:debug migration:generate -- -n", "schema:log": "npm run typeorm schema:log"
- Log in to post comments
- 1782 reads