Algunas cosas en TypeORM son diferentes actualmente (versión 0.3.7) a como están la lección de Configurando migraciones y npm scripts
ormconfig.json
o las variables de entornoCon respecto al CLI, yo hice estos cambios para que me funcione. Me parece que pueden ser mejorables pero no he encontrado una mejor manera de momento
Ahora el CLI te pide que al momento de correr un comando especifiques un archivo donde se encuentre una instancia de la clase DataSource
Yo tengo esto en src/database/dataSource.ts
import { DataSource } from 'typeorm';
exportconst connectionSource = new DataSource({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'root',
password: 'root',
database: 'my_db',
logging: true,
synchronize: false,
entities: ['src/**/*.entity.ts'],
migrations: ['src/database/migrations/*.ts'],
});
El comando typeorm
en el package.json
cambió al igual que el comando para generar las migraciones
"typeorm": "typeorm": "typeorm-ts-node-commonjs""migration:generate": "yarn typeorm migration:generate -d src/database/dataSource.ts"
Lo importante a notar acá es que:
-d
o --dataSource
se debe pasar el path donde tenemos nuestra instancia del DataSource que es src/database/dataSource.ts
en mi caso-n
para indicar el nombre con el que se creará el archivo con la migraciónmigration:generate
es necesario especificar el path
donde queremos que se cree la migración y así también especificar el nombre del archivoinit
es el nombre que le estoy dando al archivoyarn migration:generate src/database/migrations/init
yarn
en lugar de npm
npm
:yarn
usar npm run
"migration:generate": "npm run typeorm migration:generate -d src/database/dataSource.ts"
npm run migration:generate src/database/migrations/init
Estar atento a la documentación de TypeORM y Nestjs que actualmente se encuentra desactualizada en algunas secciones. Seguramente se publicará una mejor manera de hacer esto en el futuro ya que hacerlo de esta manera funciona pero se está creando 2 instancias de DataSource
DatabaseModule
con el TypeOrmModule
cómo se pueden pasar las variables de entorno a este archivo para no tener que ignorarlo en el .gitignore y que queden protegidos estos datos?
así puedes configurarlo para que acepte variables de ambiente o entorno
import { DataSource } from 'typeorm';import { config } from 'dotenv';import { ConfigService } from '@nestjs/config'; config(); const configService = new ConfigService(); exportdefaultnew DataSource({ type: 'postgres', username: configService.get('DB_USER'), password: configService.get('DB_PASS'), database: configService.get('DB_NAME'), port: configService.get('DB_PORT'), host: configService.get('DB_HOST'), synchronize: false, logging: true, entities: ['src/*/*/*.entity.ts'], migrations: ['src/database/migrations/*.ts'], });
muchas gracias 😃
Muchas gracias, too
¿Habrá alguna manera de poder tiparlo?
no funciona 😦
Dejo un los scripts del archivo package.json que me funcionaron
"typeorm": "typeorm-ts-node-commonjs", "migration:generate": "npm run typeorm migration:generate -- --dataSource src/database/dataSource.ts"
Y en el database module como lo podría usar? llevo horas buscando 😔😵💫
Yo declaro el nombre de las entidades de la siguiente forma:
import { TABLE_NAMES } from 'src/database/table.names';import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; @Entity({ name: TABLE_NAMES.PRODUCT, }) export class Product { @PrimaryGeneratedColumn() id: number; @Column({ type: 'varchar', length: 255, unique: true }) name: string; @Column({ type: 'text' }) description: string; @Column({ type: 'int' }) price: number; @Column({ type: 'int' }) stock: number; @Column({ type: 'varchar' }) image: string; }
Si corren con el comando normal, no les va funcionar, intenten con lo siguiente:
"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js", "migrations:generate": "npm run typeorm migration:generate -- -d ./src/database/data-source.ts ./src/database/migrations", "migrations:run": "npm run typeorm -- migration:run", "migrations:show": "npm run typeorm -- migration:show", "migrations:drop": "npm run typeorm -- migration:drop"