TypeORM 生成空迁移
Posted
技术标签:
【中文标题】TypeORM 生成空迁移【英文标题】:TypeORM generates an empty migration 【发布时间】:2019-11-17 08:30:04 【问题描述】:每当我运行typeorm migration:generate -n NAME
时,我得到的只是一个错误,指出我没有对数据库进行任何更改。每当我运行typeorm migration:create -n NAME
时,我都会得到一个空的迁移文件。我所有的实体都在ormconfig.json
文件中指定的文件夹中,并且都是.ts 格式。运行迁移:生成命令时,我收到一个与我的实体中的语法相关的错误(特别是我在文件顶部有我的导入的地方)。
这是我的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"
我的 package.json 包含以下包:
"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"
而我的tsconfig.json
看起来像这样:
"version": "2.4.2",
"compilerOptions":
"lib": ["es5", "es6"],
"target": "es6",
"module": "commonjs",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true
,
"exclude": [
"node_modules"
]
我在运行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
【问题讨论】:
【参考方案1】:Unexpected token import
往往会在您尝试生成或运行 .ts 格式的迁移时出现(我认为它之所以出现是因为您尝试在您的 .ts
顶部使用 import
文件)。由于 TypeORM 可以正常使用 .js 而不是 .ts(不要问为什么),请尝试运行 ts-node ./node_modules/typeorm/cli.js migration:generate -n NAME
来生成迁移,并尝试运行 ts-node ./node_modules/typeorm/cli.js migration:run
将其推送到数据库。
基本上,将这样的内容添加到您的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"
然后您可以使用npm run add-migration -n NAME
和npm run update-database
简单地运行它们。
来源:Linktypeorm migration:create 和 typeorm migration:generate 将创建 ts 文件。 migration:run 和 migration:revert 命令仅适用于 .js 文件。因此,打字稿文件需要在运行命令之前进行编译。或者,您可以将 ts-node 与 typeorm 结合使用来运行 .ts 迁移文件。
【讨论】:
以上是关于TypeORM 生成空迁移的主要内容,如果未能解决你的问题,请参考以下文章
TypeORM 不会在由 TypeORM 创建的项目中生成迁移
当电子 ABI 与已安装节点不同时,无法生成 TypeORM 迁移
typeorm:migration create on New Project Does Not Recognize Entities - “未发现数据库架构更改 - 无法生成迁移。”