web-dev-qa-db-ja.com

SyntaxError:予期しないトークンのインポートtypeORMエンティティ

そのため、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;
}

私が試したもの:

  • Node.jsを最新(バージョン8.11.2)に更新しようとしました
  • 「es5」、「es6」、「es7」のさまざまな組み合わせで、tsconfig.jsonの「lib」設定を変更しようとしました。
  • 上記の箇条書きに記載されているターゲットのtsconfig.jsonの「ターゲット」を変更しようとしました。
  • エンティティファイルのインポートステートメントを「import(lib)from(module)」から「const(lib)require(module)」に変更しようとしました。ただし、これにより多くの問題が発生し、うまく機能しません。

私はこの問題を広範囲にわたってグーグルで調査してきましたが、頭を悩ませています。ありとあらゆる助けをいただければ幸いです。

11
DeWulf

申し分なく、私は単に愚かです。

そのため、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"
   }
}
47
DeWulf

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

3
Nicholas Barry

私は同様の問題を抱えており、また愚かでした。 .jsの代わりに.ts拡張子を誤って使用してファイルに名前を付けていた

1
ericgio

それは私にも起こりました。「typeorm」ではなく「typeorm/browser」から「BaseEntity」を誤ってインポートしたため、問題が発生しました。

1つ目はjsファイルで、2つ目はtsファイルです。

0
oded