Saltar al contenido

Entidad TypeORM en NESTJS: no se puede usar la declaración de importación fuera de un módulo

Solución:

Mi suposición es que tienes un TypeormModule configuración con un entities propiedad que se ve así:

entities: ['src/**/*.entity.{ts,js}']

o me gusta

entities: ['../**/*.entity.{ts,js}']

El error que recibe es porque está intentando importar un ts archivar en un js contexto. Siempre que no esté usando el paquete web, puede usar esto en su lugar para obtener los archivos correctos

entities: [join(__dirname, '**', '*.entity.{ts,js}')]

dónde join es importado de la path módulo. Ahora __dirname resolverá a src o dist y luego encontrar el esperado ts o js archivo respectivamente. avíseme si todavía hay algún problema.

EDITAR 10/01/2020

Lo anterior asume que la configuración se realiza es un archivo compatible con javascript (.js o en el TypeormModule.forRoot() parámetros pasados). Si está utilizando un ormconfig.json en su lugar, deberías usar

entities: ["dist/**/*.entity.js"]

para que esté usando los archivos js compilados y no tenga la oportunidad de usar los archivos ts en su código.

En la documentación de TypeORM, encontré una sección específica para Typecript.

Esta sección dice:

Instale ts-node a nivel mundial:

npm install -g ts-node

Agregue el comando typeorm en la sección de scripts en package.json

"scripts" {
    ...
    "typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js"    
}

Entonces puede ejecutar el comando de esta manera:

npm run typeorm migration:run

Si necesita pasar el parámetro con el guión al script npm, deberá agregarlos después de -. Por ejemplo, si necesita generar, el comando es así:

npm run typeorm migration:generate -- -n migrationNameHere

Esto funciona con mi configuración de archivo:

{
    "type": "postgres",
    "host": "yourhost",
    "port": 5423,
    "username": "username",
    "password": "password",
    "database": "your_db",
    "synchronize": true,
    "entities": [
        "src/modules/**/*.entity.{ts,js}"
    ],
    "migrations": [
        "src/migrations/**/*.{ts,js}"
    ],
    "cli": {
        "entitiesDir": "src/modules",
        "migrationsDir": "src/migrations"
    }
}

Luego puede ejecutar el comando generate.

Como explicó Jay McDoniel en su respuesta, el problema parece ser la coincidencia de patrones de archivos de entidad en ormconfig.json file: Probablemente se importe un archivo mecanografiado (módulo) de un archivo javascript (presumiblemente un archivo mecanografiado previamente transpilado).

Debería ser suficiente eliminar un ts patrón glob en el ormconfig.json, para que TypeORM solo cargue archivos javascript. La ruta a los archivos de la entidad debe ser relativa al directorio de trabajo donde se ejecuta el nodo.

   "entities"   : [
      "dist/entity/**/*.js"
   ],
   "migrations" : [
      "dist/migration/**/*.js"
   ],
   "subscribers": [
      "dist/subscriber/**/*.js"
   ],
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *