Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.9K
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda