title: TypeScript Typeorm Node module import error: SyntaxError: Unexpected token {
body: <p>I'm trying to create a project using TypeScript with Express and Typeorm. </p>
  
  <p>I keep getting the following error when I'm trying to run the server using <code>node dist/index.js</code> after compilation with <code>tsc</code>.</p>
  
  <pre><code>&gt; typescript-express-boilerplate@1.0.0 start /home/yusta/Desktop/project
  &gt; npm run serve
  
  
  &gt; typescript-express-boilerplate@1.0.0 serve /home/yusta/Desktop/project
  &gt; node dist/index.js
  
  Example index listening on port 3000!
  /home/yusta/Desktop/project/src/entity/User.ts:1
  (function (exports, require, module, __filename, __dirname) { import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
                                                                       ^
  
  SyntaxError: Unexpected token {
      at new Script (vm.js:79:7)
      at createScript (vm.js:251:10)
      at Object.runInThisContext (vm.js:303:10)
      at Module._compile (internal/modules/cjs/loader.js:657:28)
      at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
      at Module.load (internal/modules/cjs/loader.js:599:32)
      at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
      at Function.Module._load (internal/modules/cjs/loader.js:530:3)
      at Module.require (internal/modules/cjs/loader.js:637:17)
      at require (internal/modules/cjs/helpers.js:22:18)
  </code></pre>
  
  <p>Interestingly, running <code>ts-node src/index.ts</code> works fine: </p>
  
  <pre><code>Example index listening on port 3000!
  Saved a new user with id: 2
  Loading users from the database...
  Loaded users:  [ User { id: 2, email: 'hello@hello.com', password: 'password' } ]
  </code></pre>
  
  <p>I believe it's a problem with tsconfig.json, but I already set <code>module</code> to <code>commonjs</code> as you can see below.</p>
  
  <p><strong>tsconfig.json</strong></p>
  
  <pre><code>{
    "compilerOptions": {
      "module": "commonjs",
      "esModuleInterop": true,
      "target": "es2018",
      "noImplicitAny": true,
      "moduleResolution": "node",
      "sourceMap": true,
      "outDir": "dist",
      "baseUrl": ".",
      "paths": {
        "*": [
          "node_modules/*",
          "src/types/*"
        ]
      },
      "emitDecoratorMetadata": true,
      "experimentalDecorators": true,
    },
    "include": [
      "src/**/*"
    ]
  }
  </code></pre>
  
  <p><strong>package.json</strong></p>
  
  <pre><code>{
    "name": "typescript-express-boilerplate",
    "version": "1.0.0",
    "description": "Boilerplate project for TypeScript with ExpressJS.",
    "engines": {
      "node": "10.x"
    },
    "scripts": {
      "start": "npm run serve",
      "serve": "node dist/index.js",
      "build": "npm run tslint &amp;&amp; npm run build:ts",
      "build:ts": "tsc",
      "dev": "concurrently -k -p \"[{name}]\" -n \"TypeScript,Node\" -c \"cyan.bold,green.bold\" \"npm run watch:ts\" \"npm run watch:node\"",
      "watch:node": "nodemon dist/index.js",
      "watch:ts": "tsc -w",
      "tslint": "tslint -c tslint.json -p tsconfig.json",
      "heroku-postbuild": "npm install &amp;&amp; npm run build"
    },
    "author": "",
    "license": "ISC",
    "dependencies": {
      "bcryptjs": "^2.4.3",
      "express": "^4.16.4",
      "oauth2orize": "^1.11.0",
      "passport": "^0.4.0",
      "passport-http-bearer": "^1.0.1",
      "pg": "^7.8.1",
      "reflect-metadata": "^0.1.13",
      "typeorm": "^0.2.14"
    },
    "devDependencies": {
      "@types/express": "^4.16.1",
      "@types/node": "^11.10.4",
      "@types/oauth2orize": "^1.8.5",
      "@types/passport": "^1.0.0",
      "@types/passport-http-bearer": "^1.0.33",
      "concurrently": "^4.1.0",
      "nodemon": "^1.18.10",
      "tslint": "^5.13.0",
      "typescript": "^3.3.3333"
    }
  }
  </code></pre>
  
  <p><strong>index.ts</strong></p>
  
  <pre><code>import "reflect-metadata";
  import express from "express";
  import { createConnection } from "typeorm";
  import { User } from "./entity/User";
  
  createConnection().then(async connection =&gt; {
      const user = new User();
      user.email = "hello@hello.com";
      user.password = "password";
      await connection.manager.save(user);
      console.log("Saved a new user with id: " + user.id);
  
      console.log("Loading users from the database...");
      const users = await connection.manager.find(User);
      console.log("Loaded users: ", users);
  }).catch(error =&gt; console.log(error));
  
  // Create a new express application instance
  const app: express.Application = express();
  
  app.get("/", function (req: express.Request, res: express.Response) {
      res.send("Hello World!");
  });
  
  app.listen(process.env.PORT || 3000, function () {
      console.log("Example index listening on port 3000!");
  });
  </code></pre>
  
  <p><strong>entity/User.ts</strong></p>
  
  <pre><code>import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
  
  @Entity()
  export class User {
  
      @PrimaryGeneratedColumn()
      id: number;
  
      @Column({
          length: 30
      })
      email: string;
  
      @Column()
      password: string;
  }
  </code></pre>
  
  <p>Thanks in advance.</p>
  
  <p><strong>Edit:</strong></p>
  
  <p>The compiled JavaScript code does not have ES6 import statements, it uses commonjs modules:</p>
  
  <p><strong>index.js</strong></p>
  
  <pre><code>"use strict";
  var __importDefault = (this &amp;&amp; this.__importDefault) || function (mod) {
      return (mod &amp;&amp; mod.__esModule) ? mod : { "default": mod };
  };
  Object.defineProperty(exports, "__esModule", { value: true });
  require("reflect-metadata");
  const express_1 = __importDefault(require("express"));
  const typeorm_1 = require("typeorm");
  const User_1 = require("./entity/User");
  typeorm_1.createConnection().then(async (connection) =&gt; {
      const user = new User_1.User();
      user.email = "hello@hello.com";
      user.password = "password";
      await connection.manager.save(user);
      console.log("Saved a new user with id: " + user.id);
      console.log("Loading users from the database...");
      const users = await connection.manager.find(User_1.User);
      console.log("Loaded users: ", users);
  }).catch(error =&gt; console.log(error));
  // Create a new express application instance
  const app = express_1.default();
  app.get("/", function (req, res) {
      res.send("Hello World!");
  });
  app.listen(process.env.PORT || 3000, function () {
      console.log("Example index listening on port 3000!");
  });
  //# sourceMappingURL=index.js.map
  </code></pre>
  
  <p><strong>entity/User.js</strong></p>
  
  <pre><code>"use strict";
  var __decorate = (this &amp;&amp; this.__decorate) || function (decorators, target, key, desc) {
      var c = arguments.length, r = c &lt; 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
      if (typeof Reflect === "object" &amp;&amp; typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
      else for (var i = decorators.length - 1; i &gt;= 0; i--) if (d = decorators[i]) r = (c &lt; 3 ? d(r) : c &gt; 3 ? d(target, key, r) : d(target, key)) || r;
      return c &gt; 3 &amp;&amp; r &amp;&amp; Object.defineProperty(target, key, r), r;
  };
  var __metadata = (this &amp;&amp; this.__metadata) || function (k, v) {
      if (typeof Reflect === "object" &amp;&amp; typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
  };
  Object.defineProperty(exports, "__esModule", { value: true });
  const typeorm_1 = require("typeorm");
  let User = class User {
  };
  __decorate([
      typeorm_1.PrimaryGeneratedColumn(),
      __metadata("design:type", Number)
  ], User.prototype, "id", void 0);
  __decorate([
      typeorm_1.Column({
          length: 30
      }),
      __metadata("design:type", String)
  ], User.prototype, "email", void 0);
  __decorate([
      typeorm_1.Column(),
      __metadata("design:type", String)
  ], User.prototype, "password", void 0);
  User = __decorate([
      typeorm_1.Entity()
  ], User);
  exports.User = User;
  //# sourceMappingURL=User.js.map
  </code></pre>