node.js - TypeORM genererar en tom migration
När jag kör typeorm migration:generate -n NAME får jag alltid ett felmeddelande som säger att inga ändringar har gjorts i databasen. När jag kör typeorm migration:create -n NAME, får jag en tom migrationsfil. Alla mina entiteter finns i mappen som anges i ormconfig.json-filen och är i .ts-format. När jag kör ett migration:generate-kommando får jag ett fel som är relaterat till syntaxen i mina entiteter (specifikt där jag har mina imports högst upp i filen).
Detta är 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 innehåller följande paket:
"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"
}
Och min tsconfig.json ser ut så här:
{
"version": "2.4.2",
"compilerOptions": {
"lib": ["es5", "es6"],
"target": "es6",
"module": "commonjs",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true
},
"exclude": [
"node_modules"
]
}
Felet jag får när jag kör 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
Oväntad token import tenderar att dyka upp när du försöker generera eller köra en migration som är i .ts-format (jag antar att det dyker upp eftersom du försöker importa något högst upp i din .ts-fil). Eftersom TypeORM fungerar korrekt med .js istället för .ts (fråga inte varför), försök att köra ts-node ./node_modules/typeorm/cli.js migration:generate -n NAME för att generera en migration och ts-node ./node_modules/typeorm/cli.js migration:run för att skicka den till databasen istället.
I princip är det lättare att lägga till något sådant 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"
Då kan du enkelt köra dem med npm run add-migration -n NAME och npm run update-database.
typeorm migration:create och typeorm migration:generate kommer att skapa ts-filer. migration:run och migration:revert-kommandona fungerar endast på .js-filer. Därför måste TypeScript-filerna kompileras innan kommandona körs. Alternativt kan du använda ts-node tillsammans med typeorm för att köra .ts-migrationsfiler.
- Källa: Länk
