node.js - TypeORM genererer en tom migrasjon


Når jeg kjører typeorm migration:generate -n NAME, får jeg bare en feil som sier at det ikke er gjort noen endringer i databasen. Når jeg kjører typeorm migration:create -n NAME, får jeg en tom migrasjonsfil. Alle mine entities ligger i mappen som er spesifisert i ormconfig.json-filen, og er i .ts-format. Når jeg kjører en migration:generate-kommando, får jeg en feil som er relatert til syntaksen i mine entities (spesielt der jeg har importene mine øverst i filen).

Dette er min ormconfig.json:

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

Min package.json inneholder de følgende pakkene:

  "dependencies": {
    "@tsed/common": "^5.21.0",
    "@tsed/core": "^5.21.0",
    "@tsed/di": "^5.21.0",
    "@types/mssql": "^4.0.15",
    "@types/node": "^12.0.12",
    "body-parser": "^1.19.0",
    "compression": "^1.7.4",
    "concurrently": "^4.1.1",
    "cookie-parser": "^1.4.4",
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "express-handlebars": "^3.1.0",
    "method-override": "^3.0.0",
    "reflect-metadata": "^0.1.12",
    "pg": "^7.11.0",
    "typeorm": "^0.2.15"
  },
  "devDependencies": {
    "@types/express": "^4.17.0",
    "@types/node": "^9.6.5",
    "dotenv": "^8.0.0",
    "nodemon": "^1.19.1",
    "ts-node": "^3.3.0",
    "typescript": "^3.3.3333"
  }

Og min tsconfig.json ser slik ut:

{
    "version": "2.4.2",
    "compilerOptions": {
        "lib": ["es5", "es6"],
        "target": "es6",
        "module": "commonjs",
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "sourceMap": true
    },
    "exclude": [
        "node_modules"
    ]
}

Feilen jeg får når jeg kjører typeorm migration:generate -n Name:

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 (%AppData%\nvm\v8.11.2\node_modules\typeorm\platform\PlatformTools.js:107:28

Svar #1

Uventet token import pleier å dukke opp når du prøver å generere eller kjøre en migrasjon som er i .ts-format (jeg antar at det dukker opp fordi du prøver å import noe øverst i .ts-filen din). Siden TypeORM fungerer riktig med .js i stedet for .ts (ikke spør hvorfor), prøv å kjøre ts-node ./node_modules/typeorm/cli.js migration:generate -n NAME for å generere en migrasjon og ts-node ./node_modules/typeorm/cli.js migration:run for å pushe den til databasen i stedet.

Essensielt sett er det lettere å legge til noe som dette i din package.json:

    "add-migration": "ts-node ./node_modules/typeorm/cli.js migration:generate -n",
    "update-database": "ts-node ./node_modules/typeorm/cli.js migration:run"

Da kan du enkelt kjøre dem ved å bruke npm run add-migration -n NAME og npm run update-database.

typeorm migration:create og typeorm migration:generate vil opprette ts-filer. Kommandoene migration:run og migration:revert fungerer bare på .js-filer. Dermed må typescript-filene kompileres før kommandoene kjøres. Alternativt kan du bruke ts-node sammen med typeorm for å kjøre .ts-migrasjonsfiler.

  • Kilde: Lenke

Relaterte artikler