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
