typescript - Problema de migración de TypeORM con nx-Monorepo
Intenté esto mucho, pero ahora creo que necesito algo de ayuda. Tengo un nx-monorepo con un frontend en Angular y un backend en NestJS. Ahora añadí una base de datos Postgres-SQL con TypeORM. Todo está funcionando bien, la conexión a la base de datos está activa, las llamadas a la API están llegando, etc. Pero no puedo agregar el script para generar migraciones. Añadí un comando de ejecución para mi proyecto backend:
"generate-migration": {
"builder": "@nrwl/workspace:run-commands",
"outputs": [],
"options": {
"command": "ts-node ../../node_modules/.bin/typeorm migration:generate -n",
"cwd": "apps/api"
}
}
Puedo ejecutar el comando con "npm run api:generate-migration", pero resulta en este error:
Error durante la generación de la migración: /apps/api/src/model/base.entity.ts:1 import { __decorate, __metadata } from "tslib"; ^^^^^^
SyntaxError: No se puede usar la declaración import fuera de un módulo en wrapSafe (node:internal/modules/cjs/loader:1024:16) en Module._compile (node:internal/modules/cjs/loader:1072:27) en Module.m._compile (/usr/local/lib/node_modules/ts-node/src/index.ts:1056:23) en Module._extensions..js (node:internal/modules/cjs/loader:1137:10) en Object.require.extensions. [como .ts] (/usr/local/lib/node_modules/ts-node/src/index.ts:1059:12) en Module.load (node:internal/modules/cjs/loader:973:32) en Function.Module._load (node:internal/modules/cjs/loader:813:14) en Module.require (node:internal/modules/cjs/loader:997:19) en require (node:internal/modules/cjs/helpers:92:18) en /Users/IsabelleGlasmacher/Documents/Programme/save_easytonomy/src/util/DirectoryExportedClassesLoader.ts:41:22 ERROR: Algo salió mal en @nrwl/run-commands - Falló el comando: ts-node ../../node_modules/.bin/typeorm migration:generate -n
ormConfig.json:
{
...
"type": "postgres",
"migrationsTableName": "migration",
"migrations": ["src/migration/*.ts"],
"cli": {
"migrationsDir": "src/migration"
},
"ssl": false
}
¿Alguien sabe algo sobre eso y podría ayudarme? Por favor :)
Respuesta #1
Puedo crear un servicio de backend usando NX@13, NestJS@8 y [email ,
En project.json de game-api, agregué algunos comandos como este
"generate-migration": {
"builder": "@nrwl/workspace:run-commands",
"outputs": [],
"options": {
"command": "ts-node --project tsconfig.app.json ../../node_modules/.bin/typeorm migration:generate --pretty -f .env.local",
"cwd": "apps/game-api"
}
},
Repositorio de código: https://github.com/coinconket/conketkemon
Respuesta #2
Espero que esto sea útil para algunas personas. Para la última nx@^14, @nestjs/*@^9 y typeorm@~0.3:
en tu project.json. Ten en cuenta que "apps/<app-name>" también se puede aplicar a "libs/<lib-name>"
"typeorm": {
"builder": "@nrwl/workspace:run-commands",
"outputs": [],
"options": {
"command": "ts-node --project tsconfig.json <path-to-node_modules>/typeorm/cli",
"cwd": "apps/<app-name>"
}
},
"mig-gen": {
"builder": "@nrwl/workspace:run-commands",
"outputs": [],
"options": {
"command": "nx run <app-name>:typeorm migration:generate <path-to-migration>/{args.name} -d <path-to-typeorm-config>/typeorm.config.ts",
"cwd": "apps/<app-name>"
}
},
En tu typeorm.config.ts
import { DataSource, DataSourceOptions } from 'typeorm';
import { config } from 'dotenv';
import { join } from 'path';
config({ path: '<path-to-env>/.env' });
const { DB_TYPE, DB_HOST, DB_USER, DB_PASS, DB_PORT, DB_NAME } =
process.env;
export default new DataSource({
type: DB_TYPE,
host: DB_HOST,
port: Number(DB_PORT),
username: DB_USER,
password: DB_PASS,
database: DB_NAME,
entities: [join(__dirname, '<path-to-entities>/*.entity.{ts,js}')],
migrations: [join(__dirname, '<path-to-migration>/*{.ts,.js}')],
synchronize: false,
} as DataSourceOptions);
en tu <ruta-a-la-aplicación>/tsconfig.json
asegúrate de que dentro de compilerOptions{...}, la propiedad "emitDecoratorMetadata": true esté configurada. Las propiedades module, types y target también pueden necesitar ser configuradas. Consulta tu <root-workspace>/tsconfig.base.json y la documentación https://www.typescriptlang.org/tsconfig como referencia
Finalmente, en tu terminal, puedes ejecutar el comando así para generar tu archivo de migración
nx run <app-name>:mig-gen --name=whatever-makes-you-happy
