そのため、typeORMを使用していますが、TypeScriptをJavaScriptに変換すると奇妙なエラーが発生します。次のエラーが表示されます。
(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)
私のtsconfig.json:
{
"compilerOptions": {
"lib": [
"es5",
"es6"
],
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"outDir": "./build",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true
},
"exclude": [
"client"
]
}
私の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"
}
}
エラーをスローするファイル:
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;
}
私が試したもの:
私はこの問題を広範囲にわたってグーグルで調査してきましたが、頭を悩ませています。ありとあらゆる助けをいただければ幸いです。
申し分なく、私は単に愚かです。
そのため、ormconfig.jsonは、エンティティが/ srcフォルダー内のtsファイルを指すようにします。プロジェクトをビルドするとき、エンティティがどこにあるのかを示す必要があります。ビルド後にTSファイルを参照しようとしたのは奇妙だと思いました。
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"
}
}
ts-node
を使用してtypeormを実行することもできます。これにより、ts
ファイルを実行でき、個別のjs
ファイルをコンパイルして実行することを回避できます。
このgithubコメント ごとに、次のことができます。
1.- ts-nodeとTypeScriptをグローバルにインストールします:
$ npm install -g ts-node TypeScript
2.- ts-nodeを使用してtypeormコマンドを実行します。
$ ts-node ./node_modules/.bin/typeorm migrations:generate -n
Windowsを使用している場合、問題が発生します。 このコメント ごとに、cli.js
を直接参照する必要があります。
ts-node node_modules\typeorm\cli.js
私は同様の問題を抱えており、また愚かでした。 .js
の代わりに.ts
拡張子を誤って使用してファイルに名前を付けていた
それは私にも起こりました。「typeorm」ではなく「typeorm/browser」から「BaseEntity」を誤ってインポートしたため、問題が発生しました。
1つ目はjsファイルで、2つ目はtsファイルです。