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 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.
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"
}
}
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
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
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.