无法生成迁移

Posted

技术标签:

【中文标题】无法生成迁移【英文标题】:Cannot generate the migration 【发布时间】:2019-12-27 07:59:27 【问题描述】:

我有一个项目使用 typeorm 创建数据库。当我执行命令生成到我的项目的迁移时,它给了我错误

我有以下orm配置json文件:

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

我有这个用户实体类:

import  Entity, PrimaryGeneratedColumn, Column, OneToMany  from "typeorm";
import  Transaction  from "./Transactions";
export type UserStatus = "Active" | "Inactive";

@Entity()
export class User 

@PrimaryGeneratedColumn()
id: number;

@Column("varchar",
    length:50
)
account_id: string;

@Column("varchar",
    length: 50
)
name: string;

@Column("varchar",
    length:50
)
email: string;

@Column("varchar",
    length:15
)
phone_number: string;

@Column("varchar",
    length:50
)
address: string;

@Column(
    type: "enum",
    enum: ["Active", "Inactive"]
) status: UserStatus;


@Column("varchar",
    length:50
)
current_id: string;

@OneToMany(type => Transaction, transaction => transaction.user)
transactions: Transaction[];


如果我执行命令生成迁移,它会给我以下错误:

C:\Users\Firdaus97\source\repos\Cust Local payment\Cust Local payment\MyProject>ts-node ./node_modules/.bin/typeorm migrations:generate -n
C:\Users\Firdaus97\source\repos\Cust Local payment\Cust Local payment\MyProject\node_modules\.bin\typeorm:2
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
          ^^^^^^^

SyntaxError: missing ) after argument list
    at Module._compile (internal/modules/cjs/loader.js:720:22)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:788:10)
    at Module.load (internal/modules/cjs/loader.js:643:32)
    at Function.Module._load (internal/modules/cjs/loader.js:556:12)
    at Function.Module.runMain (internal/modules/cjs/loader.js:840:10)
    at Object.<anonymous> (C:\Users\Firdaus97\AppData\Roaming\npm\node_modules\ts-node\src\bin.ts:158:12)
    at Module._compile (internal/modules/cjs/loader.js:777:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:788:10)
    at Module.load (internal/modules/cjs/loader.js:643:32)
    at Function.Module._load (internal/modules/cjs/loader.js:556:12)

【问题讨论】:

你解决了这个问题吗? 【参考方案1】:

从您的命令中删除ts-node,然后重试:

.\node_modules\.bin\typeorm migrations:generate -n

您的 node_modules 中的typeorm 已经是一个可执行文件,您不必使用ts-node,这仅适用于 TypeScript 文件。

其他解决方案:

    npm 脚本:

在您的package.json 中创建一个脚本:


  "scripts": 
    "migrate": "typeorm migrations:generate -n"
  

用 npm 运行它:

npm run migrate
    使用npx

从 npm 5.2 版本开始,您可以这样做:

npx typeorm migrations:generate -n
    使用yarn
yarn typeorm migrations:generate -n

【讨论】:

【参考方案2】:

我在 Windows 10 上遇到了这个问题,并且能够按照 this answer 和 this comment 进行修复:

在我之前的 package.json 脚本中

  "scripts": 
    ...
    "typeorm": "ts-node -r tsconfig-paths/register ./node_modules/.bin/typeorm",
    "migration:generate": "npm run typeorm migration:generate -- -n",
  

我换了 “typeorm”与

  "scripts": 
    ...
    "typeorm:win": "ts-node -r tsconfig-paths/register node_modules\\typeorm\\cli.js",
    "migration:generate:win": "npm run typeorm:win migration:generate -- -n"
  

然后这就像一个魅力npm run migration:generate:win -n &lt;&lt;migration name&gt;&gt;

【讨论】:

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

生成器无法定位尚未迁移到空安全的库

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

typeORM 未发现数据库架构更改 - 无法生成迁移。要创建新的空迁移,请使用“typeorm migration:create”命令

无法在实体框架中生成显式迁移

带有角膜宝石和 sqlite 的 Sinatra 项目。耙分贝:迁移不工作。已创建架构但无法生成测试数据

无法生成显式迁移 - 具有多个上下文/配置的实体框架 6.1.3