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 NAMEnpm run update-database 简单地运行它们。

typeorm migration:createtypeorm migration:generate 将创建 ts 文件。 migration:runmigration:revert 命令仅适用于 .js 文件。因此,打字稿文件需要在运行命令之前进行编译。或者,您可以将 ts-node 与 typeorm 结合使用来运行 .ts 迁移文件。

来源:Link

【讨论】:

以上是关于TypeORM 生成空迁移的主要内容,如果未能解决你的问题,请参考以下文章

使用 NestJS 和 TypeORM 为项目生成迁移文件

TypeORM 不会在由 TypeORM 创建的项目中生成迁移

当电子 ABI 与已安装节点不同时,无法生成 TypeORM 迁移

typeorm:migration create on New Project Does Not Recognize Entities - “未发现数据库架构更改 - 无法生成迁移。”

Typeorm - 基于实体的迁移

TypeORM:尝试手动运行迁移时“没有待处理的迁移”