无法生成迁移
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 <<migration name>>
【讨论】:
以上是关于无法生成迁移的主要内容,如果未能解决你的问题,请参考以下文章
当电子 ABI 与已安装节点不同时,无法生成 TypeORM 迁移
typeORM 未发现数据库架构更改 - 无法生成迁移。要创建新的空迁移,请使用“typeorm migration:create”命令