web-dev-qa-db-fra.com

SyntaxError: Entité ORM de type d'importation de jeton inattendue

Donc, je travaille avec typeORM et j'obtiens une erreur étrange lorsque je transpile mon TypeScript en JavaScript. Je reçois l'erreur suivante:

(function (exports, require, module, __filename, __dirname) { import { Entity, PrimaryGeneratedColumn, ManyToOne, OneToMany, TreeChildren, TreeParent, JoinColumn, Column, Tree, TreeLevelColumn } from "typeorm";
                                                              ^^^^^^

SyntaxError: Unexpected token import
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:616:28)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Function.PlatformTools.load (C:\Users\*redacted*\Workspace\experimental\*redacted*\node_modules\typeorm\platform\PlatformTools.js:126:28)

Mon tsconfig.json:

{
    "compilerOptions": {
        "lib": [
           "es5",
           "es6"
        ],
        "target": "es5",
        "module": "commonjs",
        "moduleResolution": "node",
        "outDir": "./build",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "sourceMap": true
     },
    "exclude": [
        "client"
    ]
}

Mon package.json:

{
   "name": "*redacted*",
   "version": "1.0.0",
   "description": "",
   "main": "index.js",
   "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1",
      "dev": "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec ts-node src/index.ts",
      "start": "tsc && node ./build/index.js",
      "migrate": "ts-node ./node_modules/typeorm/cli.js migration:generate"
   },
   "author": "*redacted*",
   "license": "ISC",
   "dependencies": {
      "bcryptjs": "^2.4.3",
      "body-parser": "^1.18.3",
      "class-validator": "^0.8.5",
      "express": "^4.16.3",
      "jwt-simple": "^0.5.1",
      "morgan": "^1.9.0",
      "pg": "^7.4.3",
      "reflect-metadata": "^0.1.10",
      "typeorm": "0.2.5"
   },
   "devDependencies": {
      "@types/bcryptjs": "^2.4.1",
      "@types/body-parser": "^1.17.0",
      "@types/express": "^4.11.1",
      "@types/jwt-simple": "^0.5.33",
      "@types/node": "^8.10.15",
      "ts-node": "3.3.0",
      "TypeScript": "2.5.2"
   }
}

Le fichier lançant l'erreur:

import { Entity, PrimaryGeneratedColumn, ManyToOne, OneToMany, TreeChildren, TreeParent, JoinColumn, Column, Tree, TreeLevelColumn } from "typeorm";
import { User } from "./User";
import { Debate } from "./Debate";


@Entity()
@Tree("closure-table")
export class Comment {

    @PrimaryGeneratedColumn("uuid")
    id: string;

    @Column()
    text: string;

    @ManyToOne(type => User)
    user: User;

    @ManyToOne(type => Debate, debate => debate.comments)
    debate: Debate;

    @TreeChildren()
    children: Comment[];

    @TreeParent()
    parent: Comment;
}

Ce que j'ai essayé:

  • J'ai essayé de mettre à jour mon node.js vers la dernière version (version 8.11.2)
  • J'ai essayé de changer les paramètres "lib" dans mon tsconfig.json dans diverses combinaisons de "es5", "es6" et "es7"
  • J'ai essayé de changer la "cible" de mon tsconfig.json pour les cibles répertoriées dans la puce ci-dessus.
  • J'ai essayé de changer les instructions d'importation dans mes fichiers d'entité de "import (lib) from (module)" à "const (lib) require (module)"; Cependant, cela provoque plus de problèmes et ne fonctionne pas bien.

J'ai fait de nombreuses recherches sur ce problème sur Google et cela m'a laissé me gratter la tête. toute aide, d'où qu'elle vienne, sera très appréciée.

11
DeWulf

D'accord, je suis simplement stupide.

Ainsi, le fichier ormconfig.json pointe vos entités vers vos fichiers ts dans votre dossier/src. Lorsque vous générez votre projet, il doit indiquer où se trouvent vos entités. Je pensais que c'était étrange qu'il essaye de référencer un fichier TS après la construction.

ormconfig.json

{
   "type": "postgres",
   "Host": "**********************",
   "port": 5432,
   "username": "**************",
   "password": "*************",
   "database": "*************",
   "synchronize": true,
   "logging": false,
   "entities": [
      // changed this

      "dist/entity/*.js"
   ],
   "migrations": [
      "src/migration/**/*.ts"
   ],
   "subscribers": [
      "src/subscriber/**/*.ts"
   ],
   "cli": {
      "entitiesDir": "src/entity",
      "migrationsDir": "src/migration",
      "subscribersDir": "src/subscriber"
   }
}
47
DeWulf

Vous pouvez aussi utiliser ts-node pour exécuter typeorm, qui vous permettra d'exécuter des fichiers ts et qui vous évitera de compiler et d'exécuter des fichiers js séparés.

Par ce commentaire github , vous pouvez faire ce qui suit:

1.- Installez ts-node et TypeScript globalement:

$ npm install -g ts-node TypeScript

2.- Exécutez la commande typeorm avec ts-node:

$ ts-node ./node_modules/.bin/typeorm migrations:generate -n

Si vous êtes sous Windows, vous aurez des problèmes avec cela. Par ce commentaire , vous voudrez référencer directement cli.js:

ts-node node_modules\typeorm\cli.js

3
Nicholas Barry

J'avais un problème similaire et j'étais aussi stupide. J'avais accidentellement utilisé le .js extension pour nommer le fichier au lieu de .ts

1
ericgio

cela m'est arrivé aussi, le problème est survenu parce que j'ai accidentellement importé "BaseEntity" de "typeorm/browser" au lieu de "typeorm".

le premier est le fichier js et le second le fichier ts.

0
oded