В файлах dist, почему обычная, по-видимому, ожидаемая точка с запятой вызывает ошибку «Синтаксическая ошибка: неожиданный токен ;»?

#typescript #typeorm

Вопрос:

Я создаю API подписки на рассылку новостей с помощью node.js и машинописный текст. И я впервые использую typeorm и PostgreSQL. Где я настроил typeorm и построил типы сущностей, как описано в нескольких учебных пособиях, которые я нашел.

Тем не менее, я продолжаю получать следующую ошибку для точки с запятой после всех столбцов/атрибутов в каждой сущности.

К моему удивлению, ошибка восходит к коду сборки js в папке dist, а не к исходному коду машинописи.

Журнал ошибок

 (node:14564) UnhandledPromiseRejectionWarning: FILEPATHfatura-backend-newsletterdistentityBaseEntityAttributes.js:12
    createdAt;
             ^

SyntaxError: Unexpected token ;
    at Module._compile (internal/modules/cjs/loader.js:723:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at C:UsersSeif_ADesktopFatura hackathonfatura-backend-newsletternode_modulestypeormutilDirectoryExportedClassesLoader.js:42:39
    at Array.map (<anonymous>)
    at Object.importClassesFromDirectories (C:UsersSeif_ADesktopFatura hackathonfatura-backend-newsletternode_modulestypeormutilDirectoryExportedClassesLoader.js:42:10)
(node:14564) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:14564) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
[nodemon] clean exit - waiting for changes before restart
 

ormconfig.json

 {
  "name": "mainConnect",
  "type": "postgres",
  "host": "localhost",
  "port": "5432",
  "username": "****",
  "password": "****",
  "database": "NewsletterDB",
  "synchronize": true,
  "logging": false,
  "entities": [
    "./dist/entity/*.js"
  ],
  "migrations": [
    "./dist/migration/*.js"
  ],
  "subscribers": [
    "src/subscriber/**/*.ts"
  ],
  "cli": {
    "entitiesDir": "src/entity", "migrationsDir": "src/migration"
  }
}
 

src/сущность/Базовые атрибуты.ts

 import { BaseEntity, CreateDateColumn, UpdateDateColumn } from "typeorm";

export abstract class BaseEntityAttributes extends BaseEntity {
  @CreateDateColumn({
    name: "created_at",
    type: "datetime",
  })
  public createdAt!: number;

  @UpdateDateColumn({
    name: "updated_at",
    type: "datetime",
  })
  public updatedAt!: number;
}
 

distentityBaseEntityAttributes.js

 "use strict";
var __decorate = (this amp;amp; this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 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 >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 amp;amp; r amp;amp; Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BaseEntityAttributes = void 0;
const typeorm_1 = require("typeorm");
class BaseEntityAttributes extends typeorm_1.BaseEntity {
    createdAt; // <<< Error here
    updatedAt; // <<< Also here
}
__decorate([
    typeorm_1.CreateDateColumn({
        name: "created_at",
        type: "datetime",
    })
], BaseEntityAttributes.prototype, "createdAt", void 0);
__decorate([
    typeorm_1.UpdateDateColumn({
        name: "updated_at",
        type: "datetime",
    })
], BaseEntityAttributes.prototype, "updatedAt", void 0);
exports.BaseEntityAttributes = BaseEntityAttributes;

 

Ответ №1:

Объявление класса-это функция ES2015, в то время как поля общедоступного класса

 class X {
  publicField;
}
 

являются функцией для более поздней версии ES. Если версия вашего узла более ранняя, чем 12, этот синтаксис будет считаться синтаксической ошибкой.

Попробуйте понизить целевую версию ES (ES6 или ES2015, если вы не уверены).

Комментарии:

1. Спасибо. Действительно, я забыл, что уже использовал nvm с узлом v 10.22. теперь я переключился на v 15.9. вместе с некоторыми другими изменениями, и ошибка исчезла. Я думаю, что ваш ответ-большая часть решения.

2. Рад, что решение сработало! Но если вы используете проект для производства, рассмотрите версию LTS Node (на данный момент должно быть 14).

3. Да, о кузре. Это всего лишь практический проект, чтобы поиграть и изучить новые инструменты