Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.9K
Views
Typescript y TypeORM: no se puede usar la declaración de importación fuera de un módulo

Configuré un proyecto Typescript con TypeORM y tengo algunos problemas con la compilación.

La estructura de mi paquete es así:

 root ├── db │ ├── migrations │ │ ├── a_migration.ts │ ├── connection │ │ ├── config.ts <- ormconfig │ │ ├── encrypt.ts │ │ ├── index.ts <- creates the connection ├── src │ ├── card │ │ ├── entity.ts ├── package.json ├── tsconfig.json

Mi config.ts es:

 export = { type: 'postgres', host: POSTGRES_HOST, port: POSTGRES_PORT, username: POSTGRES_USER, password: POSTGRES_PASS, database: POSTGRES_DB, synchronize: true, logging: false, entities: ['**src/**/*entity.{ts,js}'], migrations: ['**/migrations/*.{ts,js}'], cli: { entitiesDir: 'src/entity', migrationsDir: 'db/migrations', }, namingStrategy: new SnakeNamingStrategy(), };

tsconfig.json:

 { "compilerOptions": { "baseUrl": ".", "target": "es6", "module": "CommonJS", "allowJs": false, "esModuleInterop": true, "noImplicitAny": true, "resolveJsonModule": true, "outDir": "./build", "strict": true, "emitDecoratorMetadata": true, "experimentalDecorators": true }, "include": ["./src/*", "./db/*"], "exclude": ["./**/__tests__/*", "./**/__functionaltests__/*"] }

Intenté reemplazar el prefijo ** en entidades y migraciones con path.join + __dirname pero luego typeorm no pudo detectar los archivos de migración y las entidades. Entiendo que esto tiene algo que ver con la ruta que resuelve dónde termina el código en la carpeta de build , pero no estoy seguro de cómo puedo abordar esto.

Si lo vivo así, la CLI funciona para el código sin compilar (ts) que ejecuta la aplicación con algo como nodemon pero no para el compilado (js).

El error que obtengo del js compilado es: SyntaxError: Cannot use import statement outside a module

Cualquier ayuda es apreciada, muchas gracias!

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Sus entidades y migraciones deben recibir el directorio de compilación en lugar del directorio src.

Y synchronize debe establecerse como falso.

Intenta actualizar tus config.ts como se muestra a continuación:

 export = { type: 'postgres', host: POSTGRES_HOST, port: POSTGRES_PORT, username: POSTGRES_USER, password: POSTGRES_PASS, database: POSTGRES_DB, synchronize: false, logging: false, entities: ['build/src/**/*entity.{ts,js}'], migrations: ['build/db/migrations/*.{ts,js}'], cli: { entitiesDir: 'src/entity', migrationsDir: 'db/migrations', }, namingStrategy: new SnakeNamingStrategy(), };

Tenga en cuenta los cambios en las propiedades de entities y migrations . Si esto no funcionó, lo más probable es que se deba a que las rutas que especifiqué no están dentro del directorio de build . En ese caso, cámbielos según sea necesario.

¡Espero que esto te ayude! Salud 🍻 !!!

over 4 years ago · Santiago Trujillo Report

0

Encontré un problema similar, tal vez esto podría ayudarte.

Estoy usando un ormconfig.js (no compilado) (nota, .js ) para migraciones como esta (la aplicación NestJS usa otra forma de establecer su conexión DB a través de TypeORM):

 const { SnakeNamingStrategy } = require('typeorm-naming-strategies'); module.exports = { type: 'mysql', host: 'localhost', username: 'some user', database: 'some db', password: 'some pw', entities: ['./src/**/model/*.entity.ts'], migrations: ['migrations/*{.ts,.js}'], cli: { migrationsDir: 'src/migrations', }, namingStrategy: new SnakeNamingStrategy(), };

Mi IDE sugiere convertir esto en un módulo ES6, que cambia el require('typeorm-naming-strategies') en una declaración de import . Y si lo hago, obtendré:

SyntaxError: no se puede usar la declaración de importación fuera de un módulo

La salida adicional al error es:

 import { SnakeNamingStrategy } from 'typeorm-naming-strategies'; ^^^^^^

Entonces, tal vez pueda reemplazar su import (¿no se muestra?) SnakeNamingStrategy a un require .

Solo una suposición, no estoy seguro si realmente te ayuda.

over 4 years ago · Santiago Trujillo Report

0

Cree variables de entorno para sus implementaciones. En config.ts, verifique el env y luego configure las entidades y las migraciones en consecuencia.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!