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
- 2282 reads